python:如何通过正则表达式找到连续的字母对?

时间:2013-07-10 00:43:02

标签: python regex

我想找到使用正则表达式连续字母对的单词。 我知道只有一个连续的对,如 zoo(oo),puzzle(zz),arrange(rr),它可以通过'(\w){2}'来实现。但是怎么样

  • 连续两对:委员会(ttee)
  • 连续三对:簿记员(ookkee)

编辑:

  • '(\w){2}'实际上是错误的,它会找到任意两个字母而不是双字母对。
  • 我的目的是找到有字母对的,而不是字对。
  • “连续”,我的意思是字母对之间没有其他字母。

4 个答案:

答案 0 :(得分:14)

使用re.finditer

>>> [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