Регулярное выражение Python для поиска арифметических выражений в текстовых строках - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь найти арифметические выражения в текстовых строках.

Возможное арифметическое выражение:

1/3 + 1/4
cos(30) + 25*3,75
sqrt(5) + sin(45)
5 != 6
2**4 + 100.000 =
(2^3)^4
sqrt((0,25*8)/2)
3e4 - 500

Я создал регулярное выражение и использовал символ | между блоками.

pattern = '((\s*(sqrt|a?sin|a?cos|a?tan|abs|log|log10|exp)?\s*)* | (\s*[e0-9,.()\-]+\s*)* | (\spi\s*)* | (\s*[-+*/%^<>!=]*\s*)*)(\s*\=?\s*)?'

Что я действительно хочу, так это чтобы все блоки можно было использовать взаимозаменяемо в любом порядке.

Как я могу это сделать? Он не работает с использованием символа |.

1 Ответ

0 голосов
/ 06 ноября 2019

Пример использования рекурсивного регулярного выражения

([\d,.e]+|(cos|sin|sqrt)\((?R)\)|\([ ]*(?R)[ ]*\))([ ]*[-+*\/!=^]+[ ]*(?R))*

Может быть улучшено, чтобы быть более строгим, чтобы соответствовать операторам или числам

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