re模块(正则表达式使用模块)
1.元字符(.,^,$,*,+,?,{},|,(),)
. 通配符(什么都可以代替,除了换行符)
^ 匹配开头
$ 匹配结尾
2.重复
* 无穷次重复左边的字母 (0到无穷次)
+ 1到无穷次匹配 (左边字符)
? 0到1次匹配 (左边字符)
{} 自定义匹配重复多少次 (左边字符)
注意:上面的都是贪婪匹配(会匹配最多出现的次数)在后面加 ? 就会变成懒惰匹配
#元字符之字符集[]
#无特殊符号的字符集
import re
print(re.findall('[sdgsd]','gsdh')) #表或
#['g', 's', 'd']
#有特殊符号(在元字符里)
# - 范围匹配
print(re.findall('a[a-z]*','hdafhrhr1354')) #['afhrhr']
# ^ 表非
print(re.findall('[^a-d]','aaaaffart')) # ['f', 'f', 'r', 't']
# 转义
# | 或
print(re.findall('ka|b','fdkabdv')) #['ka', 'b']
3.分组 ()
有名分组
(?p<填取的名字>填匹配的正则)
1 print(re.search('d{5}','dsf24354cxv sf').group())
2 res=re.search('(?P<name>[a-z]+)d+','alex36ffg')
3 print(res.group()) #alex36
1 res=re.search('(?P<name>[a-z]+)d+','alex36ffg').group('name')
2 print(res) #alex
注意:会优先匹配组中内容,去优先级,再组开头加 ?:
print(re.findall('www.(baidu|134).com','www.baidu.com'))
#['baidu']
print(re.findall('www.(?:baidu|134).com','www.baidu.com'))
#['www.baidu.com']
4.re常用方法
re.search() #只找一个匹配结果返回,返回的是一个对象,用group()方法拿到结果
re.findall() #将所有拿到的结果放在一个列表里面
re.match() #同search方法,不过只会从开头匹配
re.split() #分割匹配,结果返回列表
re.sub() #匹配后替换
re.compile() #写规则
re.finditer() #得到的结果放在迭代器中
1 print(re.match('d+','dsg34')) #None
2 print(re.match('d+','3435gd')) #<re.Match object; span=(0, 4), match='3435'>
3 print(re.match('d+','3435gd').group()) #3435
4
5
6 print(re.split('[a-z]','gs32dsf24fvg43')) #['', '', '32', '', '', '24', '', '', '43']
7
8 print(re.sub('d+','luji','fgs23dbg34')) #fgslujidbgluji
9 print(re.sub('d+','luji','fgs23dbg34',1)) #fgslujidbg34
10
11
12 com=re.compile('d+')
13 print(com.findall('fsd34dsfg344g')) #['34', '344']
14
15
16 res=re.finditer('d','dfg2433fdgb443')
17 print(res) #<callable_iterator object at 0x00B1CB30>