【问题标题】:Regular expression to remove lines containing word with exceptions正则表达式删除包含异常单词的行
【发布时间】:2015-07-08 11:50:00
【问题描述】:

我在 PowerGrep 中使用这个正则表达式,(这个正则表达式搜索字符串 LAB RAD TRAN)

.*((LAB)|(RAD)|(TRAN)).*\r\n

在纯文本中搜索和删除包含字符串或部分字符串的行,效果很好。

现在我需要更多东西。我想保留 LABER 这个词,但删除所有其他包含 LAB 的字符串,例如 LABOR、LAB1、ALAB、ALABA 等。 有没有办法“保护”一个字符串 LABER 并删除所有其他包含 LAB 的字符串? 尝试使用 * 更改上述正则表达式,但它始终包含我需要保留的单词 LABER。有什么解决办法吗?

【问题讨论】:

    标签: regex


    【解决方案1】:

    我认为 PowerGrep 支持环视断言;如果是这样,这应该工作:

    .*((LAB(?!ER\b))|(RAD)|(TRAN)).*\r\n
    

    虽然这将保留任何以 LABER 结尾的内容,而不仅仅是整个单词。

    【讨论】:

    • 当你评论时,我正在修复这个问题,@AndrisLeduskrasts。不过,它仍然排除任何以 -LABER 结尾的内容。
    • 不过,这是 OP 给出的解决方案的一个问题,就像他的任何一句话一样,例如fooTRAN。他也可以在所有单词之前添加一个边界。
    【解决方案2】:

    您可以通过前瞻的方式将排除项添加到表单中的正则表达式:

    (?m)^.*(LAB(?!(?:ER|OV)\b)|RAD|TRAN).*$
    

    (?!(?:ER|OV)\b) 前瞻将检查序列LAB 后面是否没有EROV 和单词边界。

    我将交替添加到前瞻中,因为您要求“保护”LABERLABOV

    另外,由于您要查找整行,您可以使用多行模式(?m)^/$ 锚点。

    【讨论】:

    • 对不起,我的问题写错了,我只想保留LABER这个词。
    • 没关系,现在您知道如何为这个正则表达式添加替代品了。 ELABER 之类的词有问题,但我希望您的输入中没有这样的词。
    • 不客气,如果它被证明有帮助,也请考虑为答案投票(现在,你有这个特权)。
    • 我使用了这个解决方案,效果很好,谢谢。现在我试图找到相反问题的解决方案,正则表达式来销售包含字符串 BALL 的每一行,除了包含 FOOTBALL 的行,这可能吗?我试过这个:.*(?
    • 尝试.*(?<!foot)ball.* 忽略大小写选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 2016-12-07
    相关资源
    最近更新 更多