如何用正则表达式提取以带括号字符串为结束锚点的子串?
解决正则中括号转义导致的匹配问题
直接给你可行的正则方案,再讲清楚问题出在哪:
通用正则表达式(适配大多数正则引擎):
(?<=of\s).*?(?=\s\("Customer"\))如果是在需要双反斜杠的语言(比如Java、Python字符串)里,要写成:
(?<=of\\s).*?(?=\\s\\("Customer"\\))为什么你之前的写法不行:
- 没考虑
of和公司名、公司名和("Customer")之间的空格,直接用.*会把多余内容也匹配进来 .*是贪婪匹配,可能会超出目标内容范围,换成.*?非贪婪模式,会在遇到第一个("Customer")时就停止匹配- 部分环境里单个反斜杠会被字符串解析成转义符,所以需要双写反斜杠才能让正则引擎识别到转义的括号
- 没考虑
示例验证:
假设你的原始字符串是:"Invoice of SMITH PSYCHIATRIC, INC. ("Customer") - Q3"
用上面的正则就能精准提取出SMITH PSYCHIATRIC, INC.
内容的提问来源于stack exchange,提问作者Andrew McCollum
相关产品推荐
相关产品推荐

