在Notepad ++ regex中查找与模式不匹配的字符串

问题描述 投票:0回答:2

我想使用Notepad ++正则表达式来查找与模式不匹配的所有字符串。

示例输入文本:

{~Newline~} {〜缩进,4~} {〜颜色,蓝色〜}要成为或不成为,{~Newline~} {〜缩进,6~} {〜颜色,绿色〜} {~StartItalic~是{~EndItalic~}这个问题。{~EndDocument~}

{~~}之间的部分是降价代码。其他一切都是纯文本。我想找到所有没有markdown结构的字符串,并在它们前面插入代码{~Plain~}。结果如下所示:

{~Newline~} {〜缩进,4~} {〜颜色,蓝色〜} {〜平原〜}要成为或不成为,{~Newline~} {〜缩进,6~} {〜颜色,绿色〜} {~Plain~} {~StartItalic~} {~Plain~}是{~EndItalic~} {~Plain~}这个问题。{~EndDocument~}

markdown语法是开放式的,所以我不能只使用可能的代码列表来处理。

我可以在每个{~Plain~}之后插入~},然后删除{~Plain~}后面的每个{~,但这看起来非常笨重。

regex notepad++
2个回答
2
投票

我希望这适用于当前版本的Notepad ++(现在没有它)。

匹配:

~}((?:[^{]|(?:{[^~]))+){~

然后替换为

~}{~Plain~}$1{~

可能有用。第一组应该捕捉关闭~}和下一个{~之间的所有内容。它也会在文本中匹配{},只要它们不是开头标记{~的一部分。

编辑其他说明,以便您可以更好地修改它:

~}             end of previous tag
(              start of the "interesting" group that contains text
  (?:          non-capturing group for +
    [^{]       everything except opening braces
    |          OR
    (?:  
      {        opening brace followed by ...
      [^~]       ... some character which is not `~`
    )
  )+           end of non-capturing group for +, repeated 1 or more times
)              end of the "interesting" group
{~             start of the next tag

这是一个互动的例子:regex101 example


1
投票

您需要使用否定前瞻。 This regex将匹配所有~}事件,所以你可以用~}{~Plain~}替换它们:

~}(?!{~|$)

如果你不想匹配{~Indent,6~} {~Colour,Green~}中的空格,只需使用:

~}(?!{~|$| )
© www.soinside.com 2019 - 2024. All rights reserved.