正则表达式,一种使用表达式的方式对字符串进行匹配进行匹配的语法规则
正则的优点:速度快、效率高、准确性高
正则的缺点:新手上手难度高
正则的语法:使用元字符进行排列组合用来匹配字符串 (元字符:具有固定含义的特殊符号)
(可以使用在线测试工具OSCHINA)
#常用的元字符(每一种元字符默认只匹配一个字符)
1 . 匹配换行符以外的任意字符
2 \w 匹配字母或数字或下划线(邮箱)
3 \s 匹配任意的空白符(空格、换行、制表符...)
4 \d 匹配数字
5 \n 匹配一个换行符
6 \t 匹配一个制表符
7 ^ 匹配字符串的开始
8 $ 匹配字符串的结尾
9 \W 匹配 非 字母或数字或下划线
10 \D 匹配 非 数字
11 \S 匹配 非 空白符
12 a|b 匹配字符a或字符b
13 () 匹配括号内的表达式,也表示一个组
14 [] 匹配字符组中的字符
15 [^] 匹配 非 字符组中字符的所有字符
#量词(控制元字符出现的次数)
1 * 重复零次或更多次
2 + 重复一次或更多次
3 ? 重复零次或一次
4 {n} 重复n次
5 {n,} 重复n次或更多次
6 {n,m} 重复n到m次
#贪婪匹配和懒惰匹配
1 .* 贪婪匹配
2 .*? 惰性匹配
python使用正则表达式时要使用re模块
1.findall 查找所有并返回list
list = re.findall("m","mai le fo len,mai ni meil")
print(list)
#————>['m','m','m']
2.search 会进行匹配,如果匹配到第一个结果,就会返回这个结果。如果匹配不上,则search返回的是None(返回的也是迭代器)
ret = re.search(r'\d','5点之前你要给我5000万').group() #.group()拿数据
print(ret)
#————>a
3.match 默认只能从头进行匹配(即在正则前面加上^)
ret=re.match('a','abc').group()
print(ret)
#————>a
4.finditer 和findall差不多,只不过此时返回的是迭代器(迭代器的效率非常高)
it = re.finditer(r"\d+","我的电话号码是10086,我女朋友的电话号码是10010")
for i in it:
print(i.group())
#————>10086
#————>10010
5.预加载正则表达式(compile)
obj = re.compile(r'\d+')
obj.fanditer("我的电话号码是10086,我女朋友的电话号码是10010")
6.正则中的内容单独提取(单独获取正则中的具体内容可以给分组起名字)
s="中国联通"
obj=re.compile(r"(?P\w+) ",re.S) #(?P<分组名字>正则)可以单独从正则匹配的内容中进一步提取内容
result=obj.search(s) #此处不一定都用search,也可以用finditer……
print(result.group()) #————结果:中国联通
print(result.group('id'))
print(result.group('name'))