繁体   English   中英

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

[英]python: how to find consecutive pairs of letters by regex?

我想找到使用正则表达式连续字母对的单词。 我知道只有一对连续的动物园(oo),拼图(zz),安排(rr) ,它可以通过'(\\w){2}' 但是怎么样

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

编辑:

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

使用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}

您可以使用此模式:

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM