import re
compile 方法
compile
方法返回一个正则表达式对象:
re.compile(r'\d+')
re.compile(r'\d+', re.UNICODE)
findall 方法
findall 方法返回一个列表,包含字符串中所有匹配成功的子串,常用于在长字符串(例如 html)中检索数据。
re.findall(r'\d+', 'runoob 123 google 456')
['123', '456']
也可以先编译正则表达式,然后再检索:
pattern = re.compile(r'\d+')
pattern.findall('127.0.0.1')
['127', '0', '0', '1']
search 方法
search 方法的返回值是一个匹配类型,它包含正则从头扫描字符串首次成功匹配的信息。
reg_str = "127.0.0.1"
reg = r"(\d+)\.(\d+)\.(\d+)\.(\d+)"
result = re.search(reg, reg_str)
result
<re.Match object; span=(0, 9), match='127.0.0.1'>
groups
方法返回组匹配所得串按顺序排列的元组。
result.groups()
('127', '0', '0', '1')
group(0)
表示整个匹配到的串,其后表示组匹配所得字串。
result.group(0)
'127.0.0.1'
group(1)
表示第1组捕获到的串,以此类推。
result.group(1)
'127'
span
方法返回第一个成功匹配的信息。输出结果的含义是从下标为0处开始匹配成功3个字符。
result.span()
(0, 9)
match 方法
match
方法的返回值也是一个匹配类型,它包含正则从头扫描字符串首次成功匹配的信息,并且如果一开始就匹配失败,则认为匹配失败。
下面的这个例子匹配 IP 地址,并获取端口号:
reg_str = "127.0.0.1:8000"
reg = r"\d+\.\d+\.\d+\.\d+:(\d+)"
result = re.match(reg, reg_str)
result
<re.Match object; span=(0, 14), match='127.0.0.1:8000'>
result.groups()
('8000',)
sub 方法
sub 方法用于替换原串中正则匹配所得的内容。
phone = "2004-959-559 # 这是一个电话号码"
删除注释:
re.sub(r'#.*$', "", phone)
'2004-959-559 '
移除非数字的内容:
re.sub(r'\D', "", phone)
'2004959559'
将匹配的数字乘以 $2$:
def double(matched):
value = int(matched.group('value'))
return str(value * 2)
s = 'A23G4HFD567'
print(re.sub('(?P<value>\d+)', double, s))
A46G8HFD1134