1.re模块
1.1 常用的函数
(1)匹配函数
-
re.match(pattern, string)
:从头开始匹配,只要头不匹配就返回None,最终只匹配第一个哦>>> import re >>> string='abc' >>> pattern1='bc' >>> res = re.match(pattern1, string) >>> type(res) <class 'NoneType'> >>> pattern2='ab' >>> res = re.match(pattern2, string) >>> res <re.Match object; span=(0, 2), match='ab'> >>> res.span() (0, 2)
-
re.search(pattern, string)
:任意位置开始匹配,只要能匹配就好,最终只匹配第一个哦>>> res = re.search(pattern1, string) >>> res.span() (1, 3)
补充知识1: 如果想要得到最终匹配到的所有字符串,可以使用
group
:>>> string='bcbc' >>> pattern='bc' >>> res = re.match(pattern,string) >>> res.span() (0, 2) >>> res2 = re.search(pattern,string) >>> res2.span() (0, 2) >>> res.group() 'bc' >>> res.group(0) 'bc'
补充知识2: 除了上述的匹配方式外,还可以通过
re.compile(pattern)
来创建一个模板对象,供match, search
调用>>> pattern = re.compile(r'[\d]') >>> res = pattern.match('1234') >>> res <re.Match object; span=(0, 1), match='1'> >>> res.group() '1'
补充知识3: 如果我们要查找所有匹配的字符串该怎么做呢?使用
re.findall(string)
,这个返回的是list
类型哦>>> string='bcabc' >>> pattern='bc' >>> res = re.findall(pattern,string) >>> res ['bc', 'bc']
进一步,如果我们想查看匹配的位置怎么办呢?使用
re.finditer(pattern, string)
>>> res = re.finditer(pattern,string) >>> for i in res: ... print(i.span()) ... print(i.group()) ... (0, 2) bc (3, 5) bc >>>
(2)检索与替换
-
re.sub(pattern, repl, string, count)
:替换最大count
次,默认(0)是全部替换>>> string='phy-l-jt' >>> pattern=r'[\W]' >>> count1=0 >>> res = re.sub(pattern,repl,string,count1) >>> res 'phy*l*jt' >>> count2=1 >>> res = re.sub(pattern,repl,string,count2) >>> res 'phy*l-jt'
补充知识: 注意上面我使用
r'[\W]'
,这是一种匹配模式哦,能帮助我们快速进行模式的配置,下面我将通过一种综合运用实例来介绍一些常用的用法:
'^[a-zA-Z0-9''-'\s]{1,30}$'
,这个例子是参照了这个博客,但是我做了更加深入的探索:
① 首先,可以使用'^[a-zA-Z0-9''-'\s]{1,30}$'
也可以使用r'^[a-zA-Z0-9''-'\s]{1,30}$'
②^
到$
中的内容就是要匹配的配置信息
③[]
中的内容是要匹配的模板
④a-z
表示所有小写字母,A-Z
表示所有大写字母 ,0-9
表示数字的所有可能,''-'
表示三种字符''
,-
,'
,\s
表示匹配所有的空字符,等效于[\t\n\r\f]
,那如果是\S
就表示匹配非空字符
⑤ {1,30}表示至少匹配1次,最多20次
⑥ 在补充一点,'[^a-z]'
表示的是匹配非小写字母,这里的^
不是头匹配的意思啦
(3)分割
-
re.split(pattern, string)
>>> string='abc' >>> pattern='b' >>> res = re.split(pattern, string) >>> res ['a', 'c']
最后,我再提供一些常用的
ASCII
码对应关系:
a-z
对应97-122
A-Z
对应65-90
0-9
对应48-57