行定位符
^:匹配行首
$:匹配行尾
元字符
. 匹配除换行符以外的任意字符
\w 匹配字母、数字、下划线或汉字
\W 匹配字母、数字、下划线或汉字以外的字符
\s 匹配任意的空白符
\b 匹配单词的开始或结束
\d 匹配数字
限定符
? 匹配前面的字符零次或一次 colou?r:匹配colour和color
+ 匹配前面的字符一次或多次 go+gle:匹配的范围从gogle到goo…gle
* 匹配前面的字符零次或多次 go*gle:匹配的范围从ggle到goo…gle
{n} 匹配前面的字符n次 go{2}gle:只匹配google
{n,} 匹配前面的字符最少n次 go{2,}gle:匹配的范围从google到goo…gle
{n,m} 匹配前面的字符最少n次,最多m次 employe{0,2}:匹配employ、employe和employee
字符类
[]:匹配中括号内任意字符的字符串
排除字符
[^]:匹配不符合指定字符集中的字符串
选择字符
|:相当于或,匹配一个或另一个字符
转义字符
\
分组
()
想要使用正则表达式需要加单引号转为模式匹配
正则表达式中的特殊字符经常需要转意,可以在引号之前使用r转为元字符匹配
例
匹配m开头\结尾的字符串:
'\\bm\\w*\\b'
r'\bm\w*\b'
(需要先导入re模块:import re)
匹配字符串:
match() :从字符串的起始处匹配,如果起始位置匹配成功就返回macth对象,否则返回none值
语法:re.match(pattern,string,[flags])
#pattern:正则表达式转换为的模式字符串
#string:要进行匹配的字符串
#[flags]:可选参数,用来指定标志位的。这个标志位主要用来控制匹配方式的:
re.I:不区分字母大小写
re.A:让\w不匹配汉字
例1
pattern = r'yy-nn-\w\w'
string = "YY-NN-RR yy-nn-rr"
match = re.match(pattern,string,re.I)
print(match)
print(match.start()) #匹配对象的起始位置
print(match.end()) #匹配对象的结束位置
print(match.group()) #匹配对象的值
例2
import re
pattern = r'(13[4-9]\d{8})$|(15[01289]\d{8})$'
mobile = "15032331123"
match = re.match(pattern,mobile)
if match == None:
print(str(mobile)+":不是有效的号码")
else:
print(str(mobile)+":是有效的号码")
search():在整个字符串中搜索第一个匹配的值,用法同match()方法
findall():在整个字符串中搜索所有匹配正则表达式的字符串,并以列表的形式显示,用法同match()
例
pattern = r'yy-nn-\w\w'
string = "YY-NN-RR yy-nn-rr"
match = re.findall(pattern,string,re.I)
print(match)
替换字符串
sub()
语法:re.sub(pattern, repl, string, count=0, flags=0)
#pattern:模式匹配
#repl:用来替换的字符串
#string:要查找的被替换的字符穿
#count:表示替换的最大次数,默认值为0表示替换所有
#flags:标志位用来控制匹配方式
例
import re
pattern = r'(13[4-9]\d{8})|(15[01289]\d{8})'
mobile = "15032331123ayuikaieoQADDD23786481736864B15234524567啊啊啊啊啊"
re.sub(pattern,"********",mobile)
使用正则表达式分割字符
re.split:用指定字符分割字符串,并返回列表
语法:re.split(pattern, string, maxsplit=0, flags=0)
#pattern:匹配的分隔符
#maxsplit:表示替换的最大次数,默认值为0表示拆分所有
例
import re
pattern = r'[1a]'
string = '15032331123ayuikaieo'
re.split(pattern,string)