2015-05-01 1 views
1

Имея строку как 11+2-33 мне нужно разбить его на 11,+,2,-,33Разбивает строку и сохранить разделитель в качестве нового элемента результата

это производят меня 11 +, 2-, 33 Regex.Split(input, @"(?<=[+,-])")

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

+1

Его также неясно если 11, +, 2, +, 33 - новая строка или массив элементов [11], [+], [2], [+], [33]? –

+0

это массив элементов – kosnkov

+0

Результат в вашем вопросе '11 +, 2-, 33' отличается от того, что вам нужно' 11, +, 2, -, 33', также «есть ли лучший способ?» подразумевает, что у вас есть рабочее решение, но я думаю, что это не тот случай – Habib

ответ

4

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

var matches = Regex.Split("11+2-33", "(?<=[+-])|(?=[+-])"); 
Console.WriteLine(string.Join(",", matches)); 

11,+,2,-,33

+0

Ваше выражение соответствует операторам '+', '-' и', '. Я думаю, что вы имеете в виду '(? <= [+ -]) | (? = [+ -])'. – Guffa

+0

Спасибо @Guffa, выражение использует шаблон OP, включая look-ahead поверх внешнего вида. Я не уверен, что OP использовал '[+, -]' специально или нет, но, видимо, вы правы - он действительно проверял '+', ',' и '-'. –

1

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

string s = "11+2-33"; 
s = s.Replace("+","|+|"); 
s = s.Replace("-","|-|"); 

string[] parts = s.Split('|'); 

Вы можете реорганизовать оттуда, но это общая идея.

+1

Это заставляет меня думать, что должна быть опция 'StringSplitOptions.RetainDelimeters' –

3

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

string expression = "11+2-33"; 

string[] parts = 
    Regex.Matches(expression, @"\d+|[+-]").Cast<Match>().Select(m => m.Value).ToArray(); 

foreach (string s in parts) Console.WriteLine(s); 

Выход:

11 
+ 
2 
- 
33 
+0

, что делает Cast ()? – kosnkov

+1

@kosnkov: Преобразует объект 'MatchCollection', который возвращается из коллекции' Matches' в 'IEnumerable '. – Guffa

Смежные вопросы