我应该如何使用 Sublime Text 正则表达式引擎(PCRE)删除所有乳胶注释?

sta*_*ame 5 regex sublimetext

我在另一篇文章中关注了这个问题:Regex to capture LaTeX comments

提供的答案很棒。不过,好像只能在.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       
Run Code Online (Sandbox Code Playgroud)

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

在线结果可见https://regex101.com/r/zSIBMu/3

我应该如何修改呢?

The*_*ird 4

您还可以使用SKIP FAIL方法:

\\(?<!\\.)(?>\\\\)*%(*SKIP)(*F)|%.*
Run Code Online (Sandbox Code Playgroud)

模式匹配:

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

正则表达式演示

编辑

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

\\[\\%](*SKIP)(*F)|%.*
Run Code Online (Sandbox Code Playgroud)
  • \\[\\%]匹配\\\%使用字符类
  • (*SKIP)(*FAIL)跳过比赛
  • |或者
  • %.*匹配%和该行的其余部分

正则表达式演示