【问题标题】:Regex to capture LaTeX comments正则表达式捕获 LaTeX 评论
【发布时间】:2019-02-16 18:33:46
【问题描述】:

我正在尝试编写一个正则表达式来查找 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)

这适用于注释 7 替换为 \\\r\n

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

这不适用于评论 1,因为它选择了“}”

【问题讨论】:

  • 注释后去掉换行符的条件是什么?
  • 如果下一行只有空行,则应删除换行符。
  • 请尝试Regex.Replace(s, @"(?m)(?<=(?<!\\)(?:\\{2})*)%.*(?:\r?\n(?!\r?$))?", "")(在$之前忘记了\r?
  • 它的工作,你能添加它,以便我可以选择它作为答案。 (可选)如果你能把它的工作原理放在一些 cmet 上,因为我不明白
  • 请看下面的解释,现在清楚了吗?请告知尚不清楚的地方。

标签: c# regex


【解决方案1】:

你可以使用

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

regex demo

详情

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

【讨论】:

  • 以防万一:(?:\r?\n(?!\r?$))? 如果后面没有空行,则匹配换行序列。如果可以有 blank 行,您可以使用(?!\s*$) 而不是(?!\r?$)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 2017-08-04
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 2017-01-10
  • 2012-08-18
相关资源
最近更新 更多