我想找到使用正则表达式连续字母对的单词。
我知道只有一个连续的对,如 zoo(oo),puzzle(zz),arrange(rr),它可以通过'(\w){2}'
来实现。但是怎么样
编辑:
'(\w){2}'
实际上是错误的,它会找到任意两个字母而不是双字母对。答案 0 :(得分:14)
>>> [m.group() for m in re.finditer(r'((\w)\2)+', 'zoo')]
['oo']
>>> [m.group() for m in re.finditer(r'((\w)\2)+', 'arrange')]
['rr']
>>> [m.group() for m in re.finditer(r'((\w)\2)+', 'committee')]
['mm', 'ttee']
>>> [m.group() for m in re.finditer(r'((\w)\2)+', 'bookkeeper')]
['ookkee']
检查字符串是否包含连续的对:
>>> bool(re.search(r'((\w)\2){2}', 'zoo'))
False
>>> bool(re.search(r'((\w)\2){2}', 'arrange'))
False
>>> bool(re.search(r'((\w)\2){2}', 'committee'))
True
>>> bool(re.search(r'((\w)\2){2}', 'bookkeeper'))
True
您还可以使用以下非捕获(?:
)版本:
(?:(\w)\1){2}
答案 1 :(得分:5)
您可以使用此模式:
[a-z]*([a-z])\1([a-z])\2[a-z]*
我们的想法是使用引用捕获组的反向引用\1
和\2
。
请注意(\w){2}
匹配两个单词字符但不匹配相同的字符。
答案 2 :(得分:1)
为了检测 2个或更多连续字母,正则表达式变为:(\w)\1+
答案 3 :(得分:0)
因为您提到要从列表中进行测试,所以我已经回答了这个问题。使用falsetru的答案:
newlist = []
for word in list:
if [m.group() for m in re.finditer(r'((\w)\2)+', word)] != []:
newlist.append(word)
print newlist