我应该如何使用卓越的文本正则表达式引擎(PCRE)来删除所有乳胶评论



我在另一篇文章中回答了这个问题:Regex捕获LaTeX评论

提供的答案非常棒。然而,它似乎只能在.net引擎中使用,但我想使用PCRE引擎。这是因为我使用的是崇高的文本,而且这个引擎似乎是默认使用的。我试了很多次,但都没有成功。

乳胶是

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

我应该如何修改它?

您也可以使用SKIP FAIL方法:

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

模式匹配:

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

Regex演示

编辑

Casimir和Hippolyte提出的跳过\%匹配的非环视解决方案

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

Regex演示

使用捕获组:

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

并以CCD_ 21作为替代。

演示

或者,如果支持K

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

使用空字符串作为替换。

演示

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

最新更新