Regex技术问题:如何捕获不含"-NEW"行中首个下划线前的内容?
解决方案:用负向预查实现需求
当然可以实现!这个需求刚好能通过正则的负向预查结合捕获分组轻松搞定,既能过滤掉包含-NEW的行,又能精准捕获目标内容。
最终正则表达式
^(?!.*-NEW)([^_]+)
正则拆解(逐部分解释)
^:锚定到每一行的开头,确保我们从行首开始判断和匹配(?!.*-NEW):这是关键的负向前瞻断言,作用是检查当前行从开头到结尾的任意位置都不包含-NEW字符串。如果行里有-NEW,这个断言会直接让整个正则匹配失败,也就不会产生捕获结果([^_]+):捕获分组1,匹配一个或多个不是下划线的字符,刚好对应第一个下划线之前的所有内容
测试验证
用你的示例逐个验证:
- 行:
skipme_garbage-NEW_nothing→ 因为包含-NEW,负向预查不通过,正则无匹配结果,符合要求 - 行:
takeme_garbage_some-otherstuff→ 无-NEW,分组1捕获到takeme - 行:
takemetoo_some_more_garbage→ 无-NEW,分组1捕获到takemetoo - 行:
alsotakeme_0→ 无-NEW,分组1捕获到alsotakeme
注意事项
如果你的正则工具/语言支持多行模式(比如Python的re.MULTILINE、JavaScript的m标志),记得开启它,这样^才能正确锚定每一行的开头,而不是整个文本的开头。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

