正则表达式捕获LaTeX注释

时间:2019-02-16 18:33:46

标签: c# regex

我试图编写一个正则表达式来查找LaTeX中的注释行。我创建了以下示例。最后一个正则表达式不起作用。我可以在所有情况下使用一个正则表达式吗?

之前:

\usepackage{test}%COMMENT1

TEXT
%COMMENT2
TEXT

Value is 10\%, this should not be removed. %COMMENT3

begin{tikz}[
important 1,
%COMMENT4
important 2, %COMMENT5
]

TEXT
%COMMENT 6

TEXT

Table: value1&value2\\%COMMENT7

之后:

\usepackage{test}

TEXT
TEXT

Value is 10\%, this should not be removed.

begin{tikz}[
important 1,
important 2,
]

TEXT

TEXT

Table: value1&value2\\

这是我到目前为止所达到的:

  

(^%(。*?)\ r?\ n)

在不加任何替换的情况下可以发表评论2、4、6

  

([[\] {2}%(。*?)\ r \ n)

当替换为\\\ r \ n

时,这适用于注释7
  

([[^ \]%(。*?)\ r?\ n)

这不适用于注释1,因为它选择了'}'

1 个答案:

答案 0 :(得分:1)

您可以使用

Regex.Replace(s, @"(?m)(?<=(?<!\\)(?:\\{2})*)%.*(?:\r?\n(?!\r?$))?", "")

请参见regex demo

详细信息

  • (?m)-RegexOptions.Multiline内联选项,$也将在换行符之前匹配。
  • (?<=(?<!\\)(?:\\{2})*)-任意数量的反斜杠,都是正向查找,匹配的位置不是紧跟在\之后的位置,然后匹配0个或多个重复的双反斜杠
  • %-一个%符号
  • .*-尽可能多的除LF以外的任何0+个字符
  • (?:\r?\n(?!\r?$))?-可选的非捕获组匹配
    • \r?\n-可选CR,然后是LF ...
    • (?!\r?$)-没有立即跟随可选的CR和行尾。