如何在Python中用正则匹配并提取字符串指定可变部分?
正则表达式修正方案
问题说明
给定输入文本:
SCOPE OF WORK: Supply & Flensburg House, MMDA Colony, PAN#: AAYCS8310G installation Arumbakkam,Chennai,Tamil Nadu, xxxxxx
其中可变部分为:
Flensburg House, MMDA Colony,
和
Arumbakkam,Chennai,Tamil Nadu,
可变内容允许包含字母、数字、逗号、#、-、_,其余部分(含空格)固定不变。
当前使用的正则表达式存在问题:
SCOPE OF WORK: Supply & [A-Za-z,\s]]*PAN#: [A-Z]{5}[0-9]{4}[A-Z]{1}\n installation [A-Za-z]\n xxxxxx
需要修正正则以提取目标内容:
Flensburg House, MMDA Colony, installation Arumbakkam,Chennai,Tamil Nadu,
问题分析
当前正则的核心问题:
- 字符集
[A-Za-z,\s]]*存在语法错误(多了一个闭合方括号) - 第一个可变部分的字符集未覆盖允许的数字、#、-、_
- 第二个可变部分仅匹配单个字母,无法匹配完整内容
- 换行和空格的匹配逻辑不符合原文本结构
修正后的正则表达式
使用捕获组精准提取两个可变部分:
SCOPE OF WORK: Supply & ([A-Za-z0-9,#\-_\s]+)PAN#: [A-Z]{5}[0-9]{4}[A-Z]\ninstallation ([A-Za-z0-9,#\-_\s]+)\n xxxxxx
关键调整
- 修复字符集语法错误,移除多余的
] - 扩展字符集,加入数字、#、-、_(
-转义避免被解析为范围符) - 用
+替代*,确保可变部分非空 - 为两个可变部分分别设置捕获组,便于后续提取拼接
- 严格匹配原文本的换行和空格结构
提取结果处理
捕获到两个分组后,按目标格式拼接:
{捕获组1内容} installation {捕获组2内容}
内容的提问来源于stack exchange,提问作者Mihir Sanjay
相关产品推荐
相关产品推荐

