如何修改正则表达式仅匹配START标记后的CustomerName分组?
解决方案
最终正则表达式
(?s)(?:\G(?!^)|START).*?(?<=Mr\s)(?<CustomerName>.*?)\b
需开启的模式
- 全局模式(g):匹配所有符合条件的结果,而非仅第一个
- 单行模式(s):让
.匹配换行符,支持跨多行匹配START之后的内容 - 多行模式(m):配合
\G锚点实现连续匹配(部分正则引擎中\G已支持跨行,按需启用即可)
正则逻辑拆解
(?s):启用单行模式,允许.匹配换行符,确保能覆盖START之后的多行内容(?:\G(?!^)|START):定位匹配起点,要么是上一次匹配的结束位置(\G(?!^)排除文本开头的无效匹配),要么是匹配到START标记.*?:非贪婪匹配START(或上一次匹配结束)到目标Mr之间的所有内容,避免跳过符合条件的条目(?<=Mr\s):正向后顾断言,确保目标内容前是Mr,避免误匹配其他包含Mr的无关文本(?<CustomerName>.*?)\b:捕获CustomerName分组,非贪婪匹配到单词边界,避免抓取多余字符
匹配结果
对给定文本执行后,将得到两个符合要求的分组结果:
- 分组
CustomerName: Correct1 Smith - 分组
CustomerName: Correct2 Smith
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

