我应该如何使用 sublime text regex engine (PCRE) 删除所有乳胶注释?

How should I use sublime text regex engine (PCRE) to delete all latex comments?

我在另一个 post 中关注了这个问题:

提供的答案很棒。不过貌似只能在.net引擎中使用,不过我想用PCRE引擎。那是因为我使用的是 sublime text 并且默认情况下似乎使用了这个引擎。我尝试了很多次,但都没有成功。

乳胶是

\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
Table: value1&value2\      %COMMENT8
Table: value1&value2            \%COMMENT 9
Table: value1&value2\%            COMMENT 10
Table: value1&value2\%COMMENT11       

我试过了(?m)(?<=(?<!\)(?:\{0}))%.*(?:\r?\n(?!\r?$))?。仅适用于评论 1-6,8.

可以查到在线结果https://regex101.com/r/zSIBMu/3

如何修改?

使用捕获组:

((?<!\)(?:\\)*)%.*

并用 </code> 作为替换。</p> <p><a href="https://regex101.com/r/AzcMS8/1" rel="nofollow noreferrer">demo</a></p> <p>或者,如果支持 <code>\K

(?<!\)(?:\\)*\K%.*

替换为空字符串。

demo

注意:我看不出有任何理由删除换行序列,即使注释占满了整行。

您也可以使用 SKIP FAIL 方法:

\(?<!\.)(?>\\)*%(*SKIP)(*F)|%.*

模式匹配:

  • \(?<!\.) 匹配 \ 前面没有 \
  • (?>\\)* 匹配 \
  • 的可选对
  • %(*SKIP)(*FAIL) 匹配 % 并跳过匹配
  • |
  • %.* 匹配 % 和行的其余部分

Regex demo

编辑

Casimir et Hippolyte 建议的非环视解决方案,用于跳过 \\%

的匹配
\[\%](*SKIP)(*F)|%.*
  • \[\%] 使用字符 class
  • 匹配 \\%
  • (*SKIP)(*FAIL) 跳过比赛
  • |
  • %.* 匹配 % 和行的其余部分

Regex demo