常用方法
findall()
以列表返回所有满足条件的结果。
import re
print(re.findall('\d','a1b2c2abc123'))#['1', '2', '2', '1', '2', '3']
search()
查找到第一个匹配信息就返回一个包含匹配信息的对象(未找到时返回 None
),该对象通过 group()
函数查看结果。
import re
str = 'a1b2c2abc123'
print(re.search('\d', str).group()) # 1
match()
从字符串开始位置匹配,其它同 search()
。
import re
str = 'a1b2c2abc123'
print(re.match('\d', str).group() if re.match('\d', str) else '未找到') # 未找到
print(re.match('a.+', str).group() if re.match('a', str) else '未找到') # a1b2c2abc123
split()
以正则匹配到的字符切割字符串,返回切割后的字符串列表。
import re
str = 'a1b2c2abc123'
print(re.split('[123]', str)) # ['a', 'b', 'c', 'abc', '', '', '']
sub()
将匹配到的内容替换为指定内容,返回替换后的字符串。
import re
str = 'a1b2c2abc123'
print(re.sub('[123]', 'A', str)) # aAbAcAabcAAA
subn()
将匹配到的内容替换为指定内容,返回元组。第一个值是替换后的字符串,第二个值是替换的次数。
import re
str = 'a1b2c2abc123'
print(re.subn('[123]', 'A', str)) # ('aAbAcAabcAAA', 6)
compile()
将正则表达式编译为字节码对象,可多次调用。
import re
str = 'a1b2c2abc123'
re_obj = re.compile('[123]')
print(re_obj.sub('A', str)) # aAbAcAabcAAA
print(re_obj.subn('A', str)) # ('aAbAcAabcAAA', 6)
print(re_obj.findall(str)) # ['1', '2', '2', '1', '2', '3']
print(re_obj.split(str)) # ['a', 'b', 'c', 'abc', '', '', '']
print(re_obj.match(str)) # None
print(re_obj.search(str).group()) # 1
finditer()
返回一个存放匹配结果的迭代器。
import re
str = 'a1b2c2abc123'
result = re.finditer('\d', str)
print(result) # <callable_iterator object at 0x00000000026F80F0>
print(next(result).group()) # 1
print(next(result).group()) # 2
print([g.group() for g in result]) # ['2', '1', '2', '3']
补充
优先级问题
findall()
findall
会优先把组匹配结果内容返回,?:
可取消优先返回组匹配结果。
import re
print(re.findall('zz([a-y])', 'zze')) # ['e']
print(re.findall('zz(?:[a-y])', 'zze')) # ['zze']
split()
当正则包含组时,切割结果会保留分割内容。
import re
str = 'a1b2c2abc123'
print(re.split('\d', str)) # ['a', 'b', 'c', 'abc', '', '', '']
print(re.split('(\d)', str)) # ['a', '1', 'b', '2', 'c', '2', 'abc', '1', '', '2', '', '3', '']
组命名
可通过 ?P<name>
给组命名。
import re
str = '<title>python learning</title>'
result = re.search('<(?P<tag_name>[a-z]+)>(?P<title>.+)</([a-z]+)>', str)
print(result.group('title')) # python learning
print(result.group('tag_name')) # title
print(result.group()) # <title>python learning</title>
评论区