【问题标题】:Find everything except the search match查找除搜索匹配之外的所有内容
【发布时间】:2022-07-29 15:44:38
【问题描述】:

我需要编写一个记事本 ++ 正则表达式来匹配除搜索条件之外的所有内容。

例如,如果我有

James Bond (E1R1)

我有一个匹配 E1R1 的正则表达式。但是我需要把它倒过来,这样我才能摆脱除 E1R1 之外的所有东西。

到目前为止,我有^(?!(?<=\().+?(?=\))$).*$。但它似乎匹配一切。

【问题讨论】:

  • 抓群我的朋友,抓群。查找^.*(E1R1).*$。替换$1
  • 您能否解释一下您认为正则表达式 ^(?!(?<=().+?(?=))$).*$ 的作用。我在其中的任何地方都看不到E1R1

标签: regex notepad++


【解决方案1】:

使用

^.*\(([^()\n\r]*)\)$|^(?!.*\(([^()\n\r]*)\)$).*\R?

替换为$1

regex proof

表达式查找末尾以圆括号结尾的行,并删除这些括号外的所有文本。它将删除末尾不包含括号的整行。

【讨论】:

    【解决方案2】:

    您可以从左括号到右括号进行匹配,然后跳过该匹配。然后匹配任何应该被空字符串替换的单个字符。

    \([^()\r\n]*\)(*SKIP)(*F)|.
    

    说明

    • \([^()\r\n]*\) 匹配从左括号到右括号 (....)
    • (*SKIP)(*F)跳过比赛
    • |或者
    • . 匹配除换行符以外的任何字符

    Regex demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多