Ptyhon中RE模块的使用

1. 正则表达式
参考:廖雪峰的官方网站
2. Python Re模块
Python提供re模块,包含所有正则表达式的功能。由于Python的字符串本身也用转义,因此我们强烈建议使用Python的r前缀,就不用考虑转义的问题了
2.1 re.match(pattern, string[, flags])
如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的匹配对象。None如果字符串与模式不匹配则返回; 请注意,这与零长度匹配不同。
请注意,即使在多行模式下,re.match()也只会匹配字符串的开头而不是每行的开头。
# -*- coding: UTF-8 -*- import re # 将正则表达式编译成Pattern对象,注意hello前面的r的意思是“原生字符串” pattern = re.compile(r'hello') # 使用re.match匹配字符串,获得匹配结果,无法匹配返回None result1 = re.match(pattern, 'hello!hello3') result2 = re.match(pattern, 'helloo xugj!') result3 = re.match(pattern, 'helo xugj!') result4 = re.match(pattern, '888hello xugj!') print(result1) # 返回的是:a Match object # 匹配result1 if result1: print(result1.group()) else: print(result1) print('1匹配失败') # 匹配result2 if result2: print(result2.group()) else: print(result2) print('2匹配失败') # 匹配result3 if result3: print(result3.group()) else: print(result3) print('3匹配失败') # 匹配result4 if result4: print(result4.group()) else: print(result4) print('4匹配失败')
参考:Match API
2.2 re.search(pattern,string,flags = 0 )
扫描字符串,查找正则表达式模式产生匹配的第一个位置 ,并返回相应的match object.
如果字符串中没有位置与模式匹配则返回None;
# -*- coding:UTF-8 -*- import re pattern = re.compile(r'world') resutl1 = re.search(pattern, 'hello wor1ld!') resutl2 = re.search(pattern, 'hello world!') if resutl1: print(resutl1.group()) else: print('匹配失败
') if resutl2: print('匹配成功
:' + resutl2.group()) else: print('匹配失败
')
运行结果:
匹配失败
![]()
匹配成功:world
2.3 re.split(pattern,string,maxsplit = 0,flags = 0)
按照能够匹配的子串将string分割后返回列表。maxsplit用于指定最大分割次数,不指定将全部分割。
import re pattern = re.compile(r'\d+') print(re.split(pattern, '这是1个测试split的demo'))
运行结果:
[‘这是’, ‘个测试split的demo’]
2.4 re.findall(pattern,string,flags = 0 )
以列表形式返回全部能匹配的子串。
import re pattern1 = re.compile(r'\d+') pattern2 = re.compile(r'[a-z]+') print(re.findall(pattern1, '这是1个测试findall的123demo')) print(re.findall(pattern2, '这是1个测试findall的123demo'))
运行结果:
[‘1’, ‘123’]
[‘findall’, ‘demo’]
2.5 re.finditer(pattern, string[, flags])
返回一个顺序访问每一个匹配结果(Match对象)的迭代器。
import re pattern = re.compile(r'[\d]+') for p in re.finditer(pattern, '这是1个测试finditer的123demo'): print(p.group())
运行结果:
1
123
2.6 re.sub(pattern, repl, string[, count])
返回使用repl替换每一个匹配的字符串后的字符串
import re pattern = re.compile(r'\d+') print(re.sub(pattern, 'one', '这是101个测试sub函数的demo'))
运行结果:
这是one个测试sub函数的demo
2.7 re.subn(pattern, repl, string[, count])
返回 (sub(repl, string[, count]), 替换次数)。
import re pattern = re.compile(r'\d+') print(re.subn(pattern, 'one', '这是101个测试subn函数的demo23456')) # 也可以通过pattern.subn() pattern.match()等调用 print(pattern.subn('two', '这是101个测试subn函数的demo23456'))
运行结果:
(‘这是one个测试subn函数的demoone’, 2)
(‘这是two个测试subn函数的demotwo’, 2)