如果使用正则表达式的findall操作,在正则匹配规则中如果使用了捕获组,则并不会返回全组结果,
而只是返回捕获组的结果
比如一下例子想要获取两个连续重复的词
str = 'abb db abc abc cc def def'
res = re.findall(r"(\w+)\s\1",str,flags=re.IGNORECASE)
print(res)
>> ['abc', 'def']
res = re.findall(r"((?P<p1>\w+)\s(?P=p1))",str,flags=re.IGNORECASE)
print(res)
>>[('abc abc', 'abc'), ('def def', 'def')]
res_list = []
for i in res:
res_list.append(i[0])
print(res_list)
>>['abc abc', 'def def']
(patten) 匹配pattern并捕获结果,自动设置组号。
(?P<name>pattern) 匹配pattern并捕获结果,设置name为组名。
(\num) 对捕获组的反向引用。其中 num 是一个正整数
(?P=name) 对 命名的捕获组反向引用
(?:patten) 匹配结果但不捕获结果
网友评论