Как разбить строку на символы и числа?

Рейтинг: 1Ответов: 1Опубликовано: 08.11.2014

Дана последовательность (-1.2+3.0)+2-8/6.
Надо разбить строку на символы и числа.
Как нужно отредактировать этот шаблон? Мне нужно, чтобы число с минусом перед ним считалось отрицательным, только если оно стоит первым в выражении. Сейчас же получается -1.2 и -8 (а не - и 8).

^-?\\d+\\.?\\d*|[-+*/()]

Ответы

▲ 1Принят

Какой ответ желателен для 3+(-1 + 2): -1 или -, 1? Я думаю, что -1, даже если -1 не "стоит первым в выражении". Если скобки ограничивают "выражение", т.е. (-1) всегда интерпретируется как -1, а не (-, 1), то формально уже нельзя распознать выражение с помощью "регулярного выражения", если скобки могут быть вложены произвольное количество раз, например: 4 + (-3 + (-1 + 2)). Хотя фактически многие regex библиотеки поддерживают рекурсивный синтаксис, вот пример, как распознать выражения во вложенных скобках.

Существует много примеров как математические выражения распарсить, например, hoc калькулятор, описанный в книге "Unix. Программное окружение" Роб Пайк, Брайн Керниган.