re模块2

\d  匹配任何十进制数;它相当于类[0-9]

\D  匹配任何非数字字符;它相当于类[^0-9]

\s   匹配任何空白字符;它相当于类[\t\n\r\f\v]

\S  匹配任何非空白字符;它相当于类[^\t\n\r\f\v]

\w   匹配任何字母数字字符;它相当于类[a-zA-Z0-9_]

\W   匹配任何非字母数字字符;它相当于类[^a-zA-Z0-9_]

\b    匹配一个特殊字符边界,比如空格,&,#等

raw strings  原生字符串     强制字符串不转译   例如:

1 import re
2 
3 a = re.findall(r'i\b', 'hello i an list')
4 print(a)
5 输出:
6 ['i']
1 import re
2 
3 # a = re.findall(r'i\b', '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','c\l')
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']

猜你喜欢

转载自www.cnblogs.com/ch2020/p/12412050.html