Математическое выражение - PullRequest
       1

Математическое выражение

1 голос
/ 16 декабря 2011

Мне нужно выражение регулярного выражения, чтобы разделить математическое выражение, например:

-1*x+2*y

на: -1*x и 2*y

Я не могу просто разбить эту строку на основе+ и - (потому что могут быть отрицательные числа)

Ответы [ 3 ]

3 голосов
/ 16 декабря 2011

Вы можете разделить на + или -, которому предшествуют буква, цифра и потенциально другие элементы, которые приемлемы в ваших выражениях (например, в скобках). Вы можете использовать оглядываясь назад для достижения этой цели.

Например, в Python вы можете сделать это так:

>>> import re
>>> re.split('(?<=[a-zA-Z0-9)])[+-]', '-a+10*x-2*y+(-2)-b')
['-a', '10*x', '2*y', '(-2)', 'b']

Это разбивается на каждый + или -, которому не предшествует ни маленькая, ни заглавная буква, ни цифра, ни закрывающая скобка. Возможно, вам придется настроить это в зависимости от ваших точных характеристик того, что составляет «математическое выражение».

Это или подобное регулярное выражение должно работать в других движках регулярных выражений.

2 голосов
/ 17 декабря 2011

Математические выражения - это классическое приложение для парсеров.

Регулярные выражения недостаточно сильны, чтобы правильно выполнять работу. Даже если вы можете использовать расширенные функции в своей библиотеке регулярных выражений для принудительного подбора решения, это может привести к некоторым затруднениям.

0 голосов
/ 16 декабря 2011

Что если вы всегда разбиваете на + и разбиваете только на -, если оно не в начале выражения или после '+' (и пробелов)?

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