使用REGEX忽略指定关键词后提取行内后续文本的技术求助
原正则问题排查
- 分支顺序逻辑错误:把长度更短的
supplied by匹配分支放在前面,正则匹配时会优先触发短规则,导致supplied by M/S里的M/S不会被前缀规则吞掉,残留在提取结果中 - 空格匹配规则僵硬:写死了
supplied by和M/S之间的空格数量,无法适配不同输入里空格数量不一致的场景 - 量词使用错误:
supplied by.里的.仅能匹配单个任意字符,无法覆盖前缀后可能存在的多个连续空格
可直接使用的正则方案
方案1:支持可变长度后行断言的引擎(Python、JS ES2018+、Java 9+等适用)
直接匹配提取内容,无需额外处理捕获组:
(?<=\bsupplied by(?:\s+M\/S)?\s+).*
规则说明:
\b匹配单词边界,避免误命中包含supplied by片段的其他长单词(?:\s+M\/S)?非捕获组,匹配可选的「任意数量空格 + M/S」片段\s+匹配前缀后连接目标内容的任意数量空格.*匹配从当前位置到行尾的所有内容
方案2:不支持可变长度后行断言的引擎(旧版JS、Java 8及更早版本适用)
用捕获组提取目标内容,取第1个捕获组的返回值即可:
\bsupplied by(?:\s+M\/S)?\s+(.*)
匹配效果验证
对应你的输入示例,上述正则可正确提取到以下结果:
- MOBIS INDIA LIMITED
- MANDO AUTOMOTIVE INDIA LIMITED
- MAHINDRA AND MAHINDRA AUTO SECTOR
内容的提问来源于stack exchange,提问作者manjesh kumar
相关产品推荐
相关产品推荐

