我想替换乳胶文档中的引号。它是用德语写的,这意味着所有的引号都应该是“'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\}?)
答案 0 :(得分:0)
要将单词与空格匹配,可以使用
(``[\w\s]+''|"[\w\s]+")(?=(?:(?!\\end\{lstlisting\}).)*\\begin\{lstlisting\}?)
请参阅regex demo
如果您只在``
和''
之间或"
之间有空格,则需要将[\w\s]+
部分展开为\w+(?:\s+\w+)*
。< / p>