Python正则表达式(含字符例外):参考文献索引匹配异常修复
修复Python正则表达式的参考文献索引匹配问题
问题分析
原代码的两个正则表达式存在匹配逻辑漏洞:
- 第一个正则的字符捕获规则混乱,无法正确识别
X:Y-Z这类带连字符的完整参考文献格式 - 第二个正则的负向断言
(?!\-)无法阻止错误拆分X:Y-Z中的X:Y片段(比如把37:36-38拆成37:3),导致索引错误添加
修复后的代码
调整匹配顺序和规则,优先处理带连字符的完整格式,再匹配单独的数字冒号格式,确保匹配的是完整的目标片段:
import re line = "thiêu (30:33). chương 36-37 ghi lại tất cả những 2:6 việc này đã thật sự xảyra như thế nào (37:36-38)." # 第一步:匹配并处理 X:Y-Z 格式 line = re.sub(r'(\d+):(\d+)-(\d+)', r'\1:\2-\3\\index[KT]{?@?!0\1|0\2 @\1:\2-\3}', line) print("12 => ", line) # 第二步:匹配并处理单独的 X:Y 格式,确保后续不是数字或连字符 line = re.sub(r'(\d+):(\d+)(?![-\d])', r'\1:\2\\index[KT]{?@?!0\1|0\2 @\1:\2}', line) print("13 => ", line)
修复说明
- 第一个正则
r'(\d+):(\d+)-(\d+)':直接匹配数字:数字-数字的完整结构,捕获三个数字组,替换时保留原格式并追加对应索引 - 第二个正则
r'(\d+):(\d+)(?![-\d])':使用正向否定断言(?![-\d]),确保X:Y后面不是连字符或数字,避免错误拆分已处理的X:Y-Z格式,仅匹配独立的X:Y片段
输出结果
运行修复后的代码,将得到符合预期的输出:
12 => thiêu (30:33). chương 36-37 ghi lại tất cả những 2:6 việc này đã thật sự xảyra như thế nào (37:36-38\index[KT]{?@?!037|036 @37:36-38}).
13 => thiêu (30:33\index[KT]{?@?!030|033 @30:33}). chương 36-37 ghi lại tất cả những 2:6\index[KT]{?@?!02|06 @2:6} việc này đã thật sự xảyra như thế nào (37:36-38\index[KT]{?@?!037|036 @37:36-38}).
内容的提问来源于stack exchange,提问作者Human Resource
相关产品推荐
相关产品推荐

