d 匹配任何十进制数;它相当于类[0-9]
D 匹配任何非数字字符;它相当于类[^0-9]
s 匹配任何空白字符;它相当于类[ fv]
S 匹配任何非空白字符;它相当于类[^ fv]
w 匹配任何字母数字字符;它相当于类[a-zA-Z0-9_]
W 匹配任何非字母数字字符;它相当于类[^a-zA-Z0-9_]
匹配一个特殊字符边界,比如空格,&,#等
raw strings 原生字符串 强制字符串不转译 例如:
1 import re 2 3 a = re.findall(r'i', 'hello i an list') 4 print(a) 5 输出: 6 ['i']
1 import re 2 3 # a = re.findall(r'i', 'hello i an list') 4 a = re.findall('i\b', 'hello i an list') 5 print(a) 6 输出: 7 ['i']
1 import re 2 3 a = re.findall('c\\l','cl') 4 print(a) 5 输出: 6 ['c\l']
| 管道符或者的意思
1 import re 2 a = re.findall('ka|b','kakdfkjbkdf') 3 print(a) 4 输出: 5 ['ka', 'b']
search() 只会找第一个满足的对象 使用group() 取出找到的结果
1 import re 2 a = re.search('d+','45sdf56we4dsfsd2e') # 返回一个对象 3 print(a.group()) 4 输出: 5 45
分组 例如 通过?P<str> 获取组
1 import re 2 3 a = re.findall('(?P<name>[a-zA-Z]+)(?P<age>d+)', 'dfgs45sdf56we4dsfsd2e') # 返回一个对象 4 print(a) 5 输出: 6 [('dfgs', '45'), ('sdf', '56'), ('we', '4'), ('dsfsd', '2')] 7 8 import re 9 10 a = re.findall('[a-zA-Z]+d+', 'dfgs45sdf56we4dsfsd2e') # 返回一个对象 11 print(a) 12 输出: 13 ['dfgs45', 'sdf56', 'we4', 'dsfsd2']
match() 和search() 一样 只不过从开头开始匹配 例如:
1 import re 2 3 a = re.findall('[a-zA-Z]+d+', 'dfgs45sdf56we4dsfsd2e') 4 print(a) 5 输出: 6 ['dfgs45', 'sdf56', 'we4', 'dsfsd2'] 7 import re 8 9 a = re.match('d+', 'dfgs45sdf56we4dsfsd2e') # 返回一个对象 10 print(a) 11 输出: 12 None
re.split() 分割函数
1 import re 2 a = re.split('[ab]','asdaji') 3 print(a) 4 输出: 5 ['', 'sd', 'ji']
re.sub() 替换功能
1 import re 2 b = re.sub('d+','A','ksdfjk88fsdjhf8e8dsf76dsf656ds75dsf67') 3 print(b) 4 输出: 5 ksdfjkAfsdjhfAeAdsfAdsfAdsAdsfA
1 import re 2 b = re.sub('d','A','ksdfjk88fsdjhf8e8dsf76dsf656ds75dsf67',4) 3 print(b) 4 输出: 5 ksdfjkAAfsdjhfAeAdsf76dsf656ds75dsf67
限定次数
1 import re 2 b = re.subn('d','A','ksdfjk88fsdjhf8e8dsf76dsf656ds75dsf67') 3 print(b) 4 输出: 5 ('ksdfjkAAfsdjhfAeAdsfAAdsfAAAdsAAdsfAA', 13)
1 import re 2 com = re.compile('d+') 3 b = com.findall('skdfj8sd7f6dsf768') 4 print(b) 5 输出: 6 ['8', '7', '6', '768']
使用compile进行编译,传入对象,以后就直接调用字符串进行寻找。
使用finditer() 可以将结果变为一个可迭代对象,随用随取。 例如:
1 import re 2 b = re.finditer('d','sdhf78wejhdsf678ew6d5f7') 3 print(b) 4 print(next(b).group()) 5 print(next(b).group()) 6 print(next(b).group()) 7 print(next(b).group()) 8 输出: 9 <callable_iterator object at 0x00612E08> 10 7 11 8 12 6 13 7
去优先级,防止匹配成功后只出现括号里面的内容。 例如:
1 import re 2 # b = re.findall('www.(baidu|163).com','www.baidu.com') 3 b = re.findall('www.(?:baidu|163).com','www.baidu.com') 4 print(b) 5 输出: 6 ['www.baidu.com']