正则表达式匹配,但不在乳胶环境中

时间:2016-05-17 09:36:23

标签: regex latex notepad++ environment

我想替换乳胶文档中的引号。它是用德语写的,这意味着所有的引号都应该是“'text”形式,但是文档的一些编辑使用了这些:“text”,“text”。 这里的复杂性是,文档包含使用lstlisting环境的突出显示的代码。在那里不应该替换引号。

我有一个正则表达式,即使有多个单词,也会匹配不需要的引号中的文本:

((``((\w+\s*)+)'')|("((\w+\s*)+)"))

我也有一个正则表达式,它匹配一个字符串(在这种情况下为“asdf”),只要它不在lstlisting环境中:

"asdf"(?=((?!\\end\{lstlisting\}).)*\\begin\{lstlisting\}?)

他们自己工作得很好,但是当我把它们组合起来时这样:

((``((\w+\s*)+)'')|("((\w+\s*)+)"))(?=((?!\\end\{lstlisting\}).)*\\begin\{lstlisting\}?)

一些应该匹配的引用字符串不是,另外整个文档是匹配的。

PS:我目前正在使用notepad ++进行匹配,因为它允许。匹配\ n

[编辑]:只要我将第一部分限制为单个单词,它就可以正常工作:

((``((\w)+)'')|("((\w)+)"))(?=((?!\\end\{lstlisting\}).)*\\begin\{lstlisting\}?)

1 个答案:

答案 0 :(得分:0)

要将单词与空格匹配,可以使用

(``[\w\s]+''|"[\w\s]+")(?=(?:(?!\\end\{lstlisting\}).)*\\begin\{lstlisting\}?)

请参阅regex demo

如果您只在``''之间或"之间有空格,则需要将[\w\s]+部分展开为\w+(?:\s+\w+)*。< / p>