Regex для захвата комментариев LaTeX - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь написать регулярное выражение, чтобы найти строки комментариев в 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, потому что он выбирает '}'

1 Ответ

0 голосов
/ 16 февраля 2019

Вы можете использовать

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

См. Демоверсию regex

Подробности

  • (?m)- RegexOptions.Multiline встроенный параметр, $ будет совпадать и перед новой строкой.
  • (?<=(?<!\\)(?:\\{2})*) - при любом четном количестве обратной косой черты, это положительный взгляд сзади, который соответствует местоположению, которому непосредственно не предшествует \ и затем любые 0 или более повторений двойных обратных косых черт
  • % - знак %
  • .* - любые 0+ символов, кроме LF, как можно больше
  • (?:\r?\n(?!\r?$))? - необязательное сопоставление группы без захвата
    • \r?\n - необязательный CR, а затем LF ...
    • (?!\r?$) - сразу же с последующимнеобязательный CR и конец строки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...