Python正则表达式无法匹配连续重复字符组问题求助
问题修复方案
原代码的核心问题
if True是恒成立的条件,无论是否匹配到目标内容,都会输出"Yes"- 正则表达式仅匹配任意一组连续重复字母,没有统计重复组的数量,无法满足"三组连续重复"的需求
- 未正确管理文件资源,且硬编码路径缺乏跨平台兼容性
修复后的代码(结合re和os模块)
import re import os # 用os模块构造跨平台文件路径,避免硬编码的兼容性问题 file_path = os.path.join(os.path.expanduser('~'), 'Desktop', 'List.txt') # 使用with语句自动管理文件资源,无需手动关闭 with open(file_path, 'r') as text: for line in text: # 去除行首尾空白字符(包括换行符) word = line.strip() # 匹配所有连续重复至少2次的字母组 duplicate_groups = re.findall(r'(\w)\2+', word) # 判断是否存在至少3组连续重复 if len(duplicate_groups) >= 3: print("Yes") else: print("No")
代码说明
- os模块的作用:通过
os.path.expanduser('~')获取当前用户主目录,再用os.path.join拼接路径,让代码在Windows、Linux、macOS下都能正常运行 - 正则表达式
r'(\w)\2+':匹配连续重复至少2次的字母(如"oo""kk"),\2引用第一个捕获组的内容,确保是相同字母连续重复 - 匹配逻辑:用
re.findall提取所有符合要求的重复组,只要数量≥3就输出"Yes",否则输出"No" - 文件处理:
with语句会在代码块结束后自动关闭文件,避免资源泄漏
补充:匹配三组不同字母的连续重复
如果需要严格匹配三组不同字母的连续重复(比如bookkeeper里的oo、kk、ee),可以修改判断逻辑:
duplicate_groups = re.findall(r'(\w)\2+', word) # 对匹配结果去重后判断数量是否≥3 if len(set(duplicate_groups)) >= 3: print("Yes") else: print("No")
内容的提问来源于stack exchange,提问作者Tec Goku
相关产品推荐
相关产品推荐

