正则表达式匹配,但不在乳胶环境中
Regex matching, but not inside latex environment
我想替换 Latex 文档中的引号。它是用德语写成的,这意味着所有引号都应该是“'文本”'的形式,但是文档的一些编辑者使用了这些:"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\}?)
要匹配带有空格的单词,您可以使用
(``[\w\s]+''|"[\w\s]+")(?=(?:(?!\end\{lstlisting\}).)*\begin\{lstlisting\}?)
如果只有 ``
和 ''
之间或 "
之间有空格,则需要将 [\w\s]+
部分展开为 \w+(?:\s+\w+)*
.
我想替换 Latex 文档中的引号。它是用德语写成的,这意味着所有引号都应该是“'文本”'的形式,但是文档的一些编辑者使用了这些:"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\}?)
要匹配带有空格的单词,您可以使用
(``[\w\s]+''|"[\w\s]+")(?=(?:(?!\end\{lstlisting\}).)*\begin\{lstlisting\}?)
如果只有 ``
和 ''
之间或 "
之间有空格,则需要将 [\w\s]+
部分展开为 \w+(?:\s+\w+)*
.