Как регулярное выражение Разделить выражение, чтобы принять десятичное число? - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь сделать калькулятор.Я использую Regex.Split (), чтобы получить число, вводимое из выражения.Он хорошо работает с недесятичными цифрами, но теперь я нахожу способ получить ввод десятичного числа.

string mExp = "1.50 + 2.50";
string[] strNum = (Regex.Split(mExp, @"[\D+]"));
num1                = double.Parse(strNum[0]);
num2                = double.Parse(strNum[1]);

Ответы [ 2 ]

2 голосов
/ 29 сентября 2019

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

[^\d.]+

Демонстрация регулярных выражений

string[] strNum = (Regex.Split(mExp, @"[^\d.]+"));

По сути говоря, чтобы соответствоватьвсе, кроме цифры или символа точки рекурсивно и делится на это соответствие.

2 голосов
/ 29 сентября 2019

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

string[] strNum = (Regex.Split(mExp, @"\s*[+/*-]\s*"));
Console.WriteLine(string.Join("\n", strNum));

Вывод:

1.50
2.50

Демонстрация включенаrextester

Чтобы справиться с отрицательными числами, вы должны сделать регулярное выражение более изощренным и добавить ограждение для цифры и заглядывание для цифры или -:

string mExp = "-1.50 + 2.50 -3.0 + -1";
string[] strNum = (Regex.Split(mExp, @"(?<=\d)\s*[+*/-]\s*(?=-|\d)"));
Console.WriteLine(string.Join("\n", strNum));

Выход:

-1.50
2.50
3.0
-1

Демонстрация на rextester

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