У меня есть простое арифметическое выражение, содержащее целые числа, круглые скобки и + - */. Как это:C# split арифметическое выражение для строки []
((1+33)()(4+(3-5)))
Что мне нужно сделать, это разделить это выражение на string[]
так:
{(, (, 1, +, 33,), (,), (, 4, +, (, 3, -, 5,),),)}
Я пытаюсь сделать это с Regex
класса
public string[] SplitString(string str)
{
return Regex.Split(str, "(?<=[()-+*/])|(?=[()-+*/])");
}
Но выходные данные не совсем правильные:
{(, (, 1, +, 33,), (,), (, 4, +, (, **3-5**,),),)}
Вы можете вычислить результат, не разбивая его. Это то, что вам нужно? – user3185569
Обратите внимание, что ') - +' создайте диапазон в своем классе char, который будет соответствовать больше, чем вы могли ожидать. Поместите дефис в конце класса символов. –
Помимо этого небезопасного тире, я предлагаю рассмотреть другой способ: сопоставить нужные маркеры и вернуть список всех совпадений - вы получите более простое регулярное выражение: 'return Regex.Matches (str, @" ([() + */-] | \ d +) "). Cast() .Выберите (m => m.Value) .ToArray();' –