Регулярное выражение для сопоставления текста в уравнениях, но без учета латексных команд - PullRequest
2 голосов
/ 10 июня 2019

Я пытаюсь сопоставить что-либо в математических уравнениях, но игнорирую латексные команды.До сих пор я придумал следующее выражение:

(?<!\\)\b([a-zA-Z0-9.,]+)

У меня есть строка:

200\% Depreciation\ (Year_2) = $610,500\times\frac{blah}{12}\times0.2

Но мое выражение не соответствует 0.2 в конце, и оно не 't match 2 in Year_2.У меня есть другие сложные уравнения со схожими проблемами.

Проблема, которую я считаю, - это граница слова \b, но у меня нет лучшей альтернативы.К сожалению, я обнаружил, что не могу использовать квантификаторы внутри негативного взгляда.Так что я не смог сделать

(?<!\\[a-z]+)([a-zA-Z0-9.,]+)

В основном я хочу сопоставить все следующие:

  • чисел (включая $, %, ,, .)
  • предложения, слова, символы, даже пробелы

при игнорировании латексных команд в форме \foo и специальных символов, таких как ^, _, =, +, - и скобки.

Идеальное выражение будет соответствовать:

200\% Depreciation\ (Year _ 2) = $610,500 \ times \frac {blah} {12} \ times 0.2

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 10 июня 2019

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

\\[a-z]+(*SKIP)(*F)|[a-zA-Z0-9.,$% ]+

Объяснение:

\\[a-z]+            # a backslash followed by 1 or more alpha
(*SKIP)(*F)         # skip & forget previous match
|                   # OR
[a-zA-Z0-9.,$% ]+   # 1 or more any of these characters.

Демо

1 голос
/ 10 июня 2019

Вы можете использовать следующее регулярное выражение:

(?<!\\)(?<![a-zA-Z])[a-zA-Z]+\\?|\$?[0-9]{1,3}(\,?[0-9]{1,3})*(\.[0-9]+)?(\\[%])?

Это немного длиннее, потому что он проверяет правильность формы числа или нет.

См. Пояснение к regex101 ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...