我想使用Notepad ++正则表达式来查找与模式不匹配的所有字符串。
示例输入文本:
{~Newline~} {〜缩进,4~} {〜颜色,蓝色〜}要成为或不成为,{~Newline~} {〜缩进,6~} {〜颜色,绿色〜} {~StartItalic~是{~EndItalic~}这个问题。{~EndDocument~}
{~
和~}
之间的部分是降价代码。其他一切都是纯文本。我想找到所有没有markdown结构的字符串,并在它们前面插入代码{~Plain~}
。结果如下所示:
{~Newline~} {〜缩进,4~} {〜颜色,蓝色〜} {〜平原〜}要成为或不成为,{~Newline~} {〜缩进,6~} {〜颜色,绿色〜} {~Plain~} {~StartItalic~} {~Plain~}是{~EndItalic~} {~Plain~}这个问题。{~EndDocument~}
markdown语法是开放式的,所以我不能只使用可能的代码列表来处理。
我可以在每个{~Plain~}
之后插入~}
,然后删除{~Plain~}
后面的每个{~
,但这看起来非常笨重。
我希望这适用于当前版本的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
您需要使用否定前瞻。 This regex将匹配所有~}
事件,所以你可以用~}{~Plain~}
替换它们:
~}(?!{~|$)
如果你不想匹配{~Indent,6~} {~Colour,Green~}
中的空格,只需使用:
~}(?!{~|$| )