Нужно регулярное выражение, чтобы захватить кусочки формулы - PullRequest
2 голосов
/ 10 ноября 2009

Мне нужно расширить шаблон регулярных выражений в C #. Текущий шаблон захватывает любое умножение или деление в формуле:

([\+-]?\d+,*\d*[eE][\+-]?\d+|[\-\+]?\d+,*\d*)([\/\*])(-?\d+,*\d*[eE][\+-]?\d+|-?\d+,*\d*)

Это означает, что если выражение, например, 12+18*3+4-3/3, он захватит 18*3 и -3/3. Это прекрасно.

Теперь мне нужно расширить его, чтобы он захватил следующий пример: 12+18*3+4-3/3+10*mod8. Сначала он должен захватить 18*3, затем -3/3, как и до сих пор, но затем он должен захватить 10mod8 (или 10*mod8). Как мне этого добиться? Благодарю.

Ответы [ 2 ]

1 голос
/ 10 ноября 2009

Вы не можете реализовать какой-либо приоритет оператора в регулярном выражении. Regex просто совпадает или нет. Regex также не может обрабатывать соответствующие вложенные скобки. Единственный способ сделать это правильно - написать лексер / парсер выражения или определить грамматику и позволить инструменту, подобному ANTLR, сгенерировать лексер / парсер для вас .

1 голос
/ 10 ноября 2009

В середине у вас есть ([\/\*]).
Попробуйте изменить его на ([/*]|\*?mod) - это примет *, /, mod и *mod

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