python:如何通过regex找到连续的字母对?

2024-05-15 09:06:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

编辑:

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

Tags: 目的编辑错误字母rr单词oo委员会
3条回答

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

为了检测2个或更多连续的字母,regex变成:(\w)\1+

您可以使用此模式:

[a-z]*([a-z])\1([a-z])\2[a-z]*

其思想是使用引用捕获组的反向引用\1\2

注意,(\w){2}匹配两个单词字符,但不是同一个字符。

相关问题 更多 >