我在另一篇文章中回答了这个问题: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%.*
使用空字符串作为替换。
演示
注意:我看不出有任何理由删除换行序列,即使注释占据了所有行。