@n199a
Java

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

Имеется строка, например такая:
5+1/2*(2+5*2- 14))*1200

Я составил регулярное выражение:
(?<=\D)(?=\d|\D)|(?<=\d|\D)(?=\D)
Оно разбивает данную строку на числа, скобки и арифметические знаки операций. В результате получаем:
Найдено математическое выражение: [(-5+1/2*(2+5*2- --j))*1200]
Символ: [(]
Символ: [5]
Символ: [+]
Символ: [1]
Символ: [/]
Символ: [2]
Символ: [*]
Символ: [(]
Символ: [2]
Символ: [+]
Символ: [5]
Символ: [*]
Символ: [2]
Символ: [-]
Символ: [14]
Символ: [)]
Символ: [)]
Символ: [*]
Символ: [1200]


Но оно до конца не выполняет задуманного. Вот если число будет со знаком (-5, например), мне нужно этот самый знак тоже включить в символ, чтобы получилось так: -5+1/2*(2+5*2-14))*1200
и на выходе было:
Символ: [(]
Символ: [-5]      <- СМОТРИ СЮДА, ТУТ ЧИСЛО СО ЗНАКОМ, НЕЛЬЗЯ ОТДЕЛЯТЬ ЗНАК ОТ ЧИСЛА
Символ: [+]
Символ: [1]
Символ: [/]
Символ: [2]
Символ: [*]
Символ: [(]
Символ: [2]
Символ: [+]
Символ: [5]
Символ: [*]
Символ: [2]
Символ: [-]
Символ: [14]
Символ: [)]
Символ: [)]
Символ: [*]
Символ: [1200]

  • Вопрос задан
  • 55 просмотров
Пригласить эксперта
Ответы на вопрос 1
Psixodelik
@Psixodelik
Преподаватель на Hexlet
Попробуй глянуть в район такой регулярки:

(-?\d*\.{0,1}\d+)

Она выберет любые числа. Положительные и отрицательные
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
XCritical Software Санкт-Петербург
До 370 000 ₽
Ланит-Терком Санкт-Петербург
от 90 000 до 130 000 ₽