Python正则fullmatch方法匹配结果不符合预期问题求助
问题排查与修复方案
核心问题1:行尾未匹配字符导致fullmatch失效
file.readlines()读取的每一行字符串末尾默认携带换行符\n,同时你提供的测试文本中多数行末尾带有多余空格,你的正则规则没有覆盖这部分字符,因此fullmatch判断全不匹配。
VS Code的正则搜索默认忽略行尾换行符,因此会出现搜索能匹配、代码判断失效的差异。
核心问题2:正则规则本身存在匹配范围缺失
现有正则未覆盖合法场景的字符范围:
- 句子中允许出现大写缩写(如ASAP)、数字(如
2 pM、2gether) - 引号包裹的内容允许首字母大写(如
"Play hard. Work harder.") - 句末允许出现多个连续标点(如省略号
...)
修复后的代码
import re # 修正后的正则,补全字符匹配范围,末尾\s*兼容行尾空格、换行符 pattern = re.compile(r'(([A-Z])[a-zA-Z0-9\s,]*)((: ["‘][a-zA-Z,!?\.\s]*["’][.,!?])|(; [a-zA-Z0-9\s,.]*[!.?])|(\s["‘][a-zA-Z,.;!?\s]*["’])|([\.?!]{1,}))\s*') # 用with语法管理文件,避免资源泄露 with open('validSentences.txt', "w+", encoding='utf8') as out_file: with open('sentences.txt', encoding='utf8') as in_file: for line in in_file: matches = pattern.fullmatch(line) out_file.write("valid\n" if matches else "not valid\n")
额外优化说明
- 移除了冗余的
file.close()调用:with语法会在代码块执行结束后自动关闭文件 - 正则字符串前加
r标记为原生字符串,避免转义字符解析异常 - 无需额外处理读取到的行内容,正则末尾的
\s*已经兼容行尾任意数量的空格、换行符
内容的提问来源于stack exchange,提问作者Dogukan Ünlü
相关产品推荐
相关产品推荐

