如何修正正则表达式,提取适配有无后续下划线的目标标识
正则表达式修正方案
问题原因
你之前的正则(?<=BOND_.*_).*(?=(_|\.))中,.*是贪婪匹配,会从BOND_.*_之后一直匹配到最后一个符合_或.的位置,导致第一个示例中匹配到了SB1_66-1,而非目标的SB1。
修正后的正则方案
方案1:非贪婪匹配+正向预查
(?<=BOND_.*_).*?(?=(_|\.))
把贪婪的.*改为非贪婪的.*?,匹配到第一个_或.就停止,刚好提取出SB1/SB2。
方案2:直接匹配目标字符(更高效)
(?<=BOND_.*_)[^_.]+
[^_.]+表示匹配一个或多个**不是_和.**的字符,直接精准定位目标内容,无需预查,执行效率更高。
验证结果
- 对
BOND_aa_SB1_66-1.pdf,两个正则均匹配出SB1 - 对
BOND_bb_SB2.pdf,两个正则均匹配出SB2
内容的提问来源于stack exchange,提问作者younghyun
相关产品推荐
相关产品推荐

