如何用Perl正则表达式排除特定字符串?
正则表达式筛选问题解决办法
需求说明
原始字符串列表:
APPLEJUCE1A APPLETREE2B APPLECAKE3C APPLETEA1B APPLEWINE3B APPLEWINE1C
需要筛选出**不包含TEA或WINE1C**的字符串,预期结果:
APPLEJUCE1A APPLETREE2B APPLECAKE3C APPLEWINE3B
之前尝试正则^APPLE(?!.*(?:TEA|WINE1C)).*$未生效,现提供解决方法:
正确正则表达式
可以使用以下两种正则表达式实现需求:
^(?!.*TEA)(?!.*WINE1C)APPLE.*$^APPLE(?!.*TEA)(?!.*WINE1C).*$
原因解释
之前的正则问题在于,把两个排除条件合并在同一个负向预查中,.*的匹配逻辑导致无法精准拦截目标子串。拆分出两个独立的负向预查(?!.*TEA)和(?!.*WINE1C),可以明确要求字符串中既不包含TEA、也不包含WINE1C,无论这两个子串出现在APPLE之后的任意位置。
验证结果
使用上述正则匹配原始字符串,会得到预期的筛选结果:
APPLEJUCE1A APPLETREE2B APPLECAKE3C APPLEWINE3B
内容的提问来源于stack exchange,提问作者x2ffer12
相关产品推荐
相关产品推荐

