正则表达式匹配花括号内分号与空格的贪婪匹配问题求助
解决正则表达式贪婪匹配导致的错误匹配问题
你的问题核心在于原正则的贪婪匹配特性:.*会尽可能多地抓取字符,哪怕跨越多个花括号对,导致把花括号外的分号误判为花括号内的内容,进而错误匹配第4行。
修正后的正则表达式
要精准匹配「花括号内部包含分号」的行,你可以使用:
^.*\{[^{}]*;[^{}]*\}$
逐部分解释这个正则
^和$:分别匹配行的开头和结尾,确保我们匹配的是整个行(如果你的匹配场景是提取字符串而非整行,可以去掉这两个符号).*:匹配花括号对之前/之后的任意内容(这里不需要非贪婪,因为我们已经限制了花括号内的内容范围)\{:匹配左花括号[^{}]*:匹配任意数量的「非花括号字符」,确保我们不会跨越到下一个花括号;:匹配我们要找的分号(必须在花括号内部)[^{}]*:继续匹配分号之后的非花括号字符\}:匹配右花括号
测试你的示例行
- 第1行
LWD{ARC,STETH,SONSCOPE,ADN}:花括号内无分号 → 不匹配 - 第2行
LWD{GR; RES,PWD} 13-3/8 @ 8010; LOT 11.1;:花括号内有分号 → 匹配 - 第3行
LWD{GR,RES,AIT,DEN,NEUT; GR,DSI} @ 8800; NO SWC; RNG CSG:花括号内有分号 → 匹配 - 第4行
LWD{GR,RES,DEN,NEUT} @ 10400; NO SWC; LWD{GR,RES} @ 12075; NO SWC; 13-5/8 @ 11998; WOC:所有花括号内都无分号 → 不匹配
完全符合你的需求!
内容的提问来源于stack exchange,提问作者Heather
相关产品推荐
相关产品推荐

