You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python Regex提取包含连续重复双字符的完整单词

问题解答

原有写法的问题

  • 第一种写法re.findall(r'\b.*([A-Za-z])\1.*\b', a)返回字母列表的原因:re.findall规则为当正则表达式包含捕获组时,仅返回捕获组匹配到的内容,你写的正则中只有([A-Za-z])这一个捕获组,最终返回的自然是匹配到的单个重复字母,而非完整单词。
  • 第二种写法返回空列表的原因:你定义的pat='(\w*)\1'要求\w*匹配的整段内容完全重复,比如abab才符合规则,和“连续两个相同字符”的需求不符,嵌套外层规则后自然匹配不到有效内容。

正确实现方法

匹配规则说明

要匹配包含连续双英文字母的完整单词,正则表达式写为:r'\b\w*([a-zA-Z])\1\w*\b'
各部分含义:

  • \b:匹配单词边界,确保取到的是完整单词
  • \w*:匹配单词中双字符前后的任意长度单词字符(如果不需要匹配数字、下划线,可替换为[a-zA-Z]*)
  • ([a-zA-Z])\1:匹配连续两次出现的相同英文字母

代码实现

方法1:调整findall捕获组

import re

def get_double_char_words(a):
    # 整个单词作为第一个捕获组,内部双字符用第二个捕获组,findall默认返回第一个捕获组内容
    res = re.findall(r'\b(\w*([a-zA-Z])\2\w*)\b', a)
    # 提取元组中的第一个元素即完整单词
    return [item[0] for item in res]

方法2:使用finditer更直观

import re

def get_double_char_words(a):
    pat = r'\b\w*([a-zA-Z])\1\w*\b'
    # 遍历匹配对象直接取完整匹配结果
    return [match.group() for match in re.finditer(pat, a)]

调用示例:

a = "look settle hello test book apple"
print(get_double_char_words(a))
# 输出:['look', 'settle', 'hello', 'book', 'apple']

内容的提问来源于stack exchange,提问作者NataliaKra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:54:01