2013-12-09 4 views
0

Привет ребята У меня есть строка, как что:Найти все подстроки в строке

example(string1,string2,string3) 

И мне нужно, чтобы извлечь все параметры. Я использовал это регулярное выражение ^(.*?\(), но он проверяет только текст в скобках. Как показывают результаты я ожидал иметь:

string1 
string2 
string3 
+3

Ваш вопрос действительно неясен, вы говорите, что у вас есть строка *, например 'example (string1, string2, string3, string4)' и хотите извлечь из нее параметры? – James

+0

@ Джеймс, извините, теперь я отредактировал ответ – Tinwor

+0

Каковы ваши ожидаемые результаты? – Kaf

ответ

2

Если у вас есть только одна пара скобок, то вы можете получить его непосредственно Regex.Match() способом, как показано ниже:

string str = "example(string1,string2,string3) and test(string4)" 
string[] params = Regex.Match(str, @"\(([^)]*)\)").Groups[1].Value.Split(','); 

Но, если у вас есть несколько параметров с несколько брекеты, то вам необходимо получить MatchCollection первый используя Regex.Matches() метод, а затем перебирать ее в цикле, чтобы получить все параметры, как показано ниже:

string str = "example(string1,string2,string3) and test(string4)" 
List<string> params = new List<string>(); 
MatchCollection collection = Regex.Matches(str, @"\(([^)]*)\)"); 

for (int i = 0; i < collection.Count; i++) 
{ 
    params.AddRange(collection[i].Groups[1].Value.Split(',').ToList()); 
} 
+0

Спасибо @UpendraChaudhari, но я предпочитаю использовать регулярное выражение, потому что я думаю, что это более ясно. – Tinwor

+0

Проверьте обновленный ответ с помощью регулярного выражения. –

1

Попробуйте это ..

string[] result = str.TrimStart(@"example(").TrimEnd(@")").Split(","); 

массив результат будет

string1 
string2 
string3 
+0

Я думаю, что довольно ясно из вопроса, что hardcoding «имя функции» в поиске не является допустимым вариантом. – Tobberoth

1

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

\((?:(?<param>[\w\d]+)[,\s]*)+\) 

с результатом:

Regex result

, поэтому у вас есть параметры в виде захватов первой группы (по имени param).

+0

Это будет соответствовать только последнему параметру – James

+0

@James, он будет соответствовать целым '(...)' со всеми параметрами в качестве захватов, я даже предоставил рабочий результат. –

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