Regex для выбора последнего выражения в математической формуле для изменения знака - PullRequest
0 голосов
/ 15 ноября 2018

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

5 --> -5

-5 --> 5

5+2*cos(10) --> 5-2*cos(10)

5-cos(10+2) --> 5+cos(10+2)

Я все еще не смог создать любое регулярное выражение, которое может соответствовать последнему выражению.Я создал это регулярное выражение (\+[(cos|sin|tan)])+(.*[0-9]*.), но оно выбирает только последнее выражение, если есть sin / cos или tan.

1 Ответ

0 голосов
/ 13 января 2019

Извините, что (невероятно) опоздал на вечеринку, но вот мое решение:

String str = "5*10/2+cos(54/90)", regex = "(\\+|-)(?=(?:[a-zA-Z]*\\(.*?\\))|[0-9^*/]+$)";
Pattern pat = Pattern.compile(regex);
Matcher m = pat.matcher(str);
String r = "";
if(m.find())
{
    r = m.group(1).equals("+")?"-":"+";
}
str = str.replaceAll(regex, r);
System.out.println(str);

Я использую BlueJ в качестве IDE, кстати.

Вот живая демонстрация:https://regex101.com/r/3EM9Ix/1

ОБЪЯСНЕНИЕ

(\\+|-) выбирает требуемый оператор, '+' или '-' (?=(?:[a-zA-Z]*\\(.*?\\))|[0-9^*/]+$) - это регулярное выражение, которое проверяет, следует ли за оператором либофункция, в которой есть буквы или просто несколько цифр

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