[英]python: how to find consecutive pairs of letters by regex?
我想找到使用正则表达式连续字母对的单词。 我知道只有一对连续的动物园(oo),拼图(zz),安排(rr) ,它可以通过'(\\w){2}'
。 但是怎么样
编辑:
'(\\w){2}'
实际上是错误的,它找到任何两个字母而不是双字母对。 >>> [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}
您可以使用此模式:
[a-z]*([a-z])\1([a-z])\2[a-z]*
我们的想法是使用反向引用\\1
和\\2
来引用捕获组。
请注意, (\\w){2}
匹配两个单词字符但不匹配相同的字符。
为了检测2个或更多连续字母 ,正则表达式变为: (\\w)\\1+
因为您提到要从列表中进行测试,所以我已经回答了这个问题。 使用falsetru的答案:
newlist = []
for word in list:
if [m.group() for m in re.finditer(r'((\w)\2)+', word)] != []:
newlist.append(word)
print newlist
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.