2012-05-09 10 views
2

Я не могу понять, как извлечь конкретные числа с определенным совпадением из строки.Regex помогает извлечь значение из строки

Пример:

string myString = "blah blah **[10]** blah **[20]** and some more blah **[30]**"; 
Regex myIDsReg = new Regex(@"\*\*\[(\d+)\]\*\*"); 

Очевидно регулярное выражение звук.

Match myMatch = myIDsReg.Match(myString); 

Доходность "** [10] **", но больше ничего.

Я не могу понять, как получить массив со следующими значениями: 10, 20, 30

+0

Пожалуйста, не прикрепите свои заголовки к «C#» и тому подобное. Для этого нужны теги. –

ответ

1

Я хотел бы сделать это

string myString = "blah blah **[10]** blah **[20]** and some more blah **[30]**"; 
Regex myIDsReg = new Regex(@"\*\*\[(\d+)\]\*\*"); 
string[] regexResult = (from Match match in myIDsReg.Matches(myString) select match.Groups[1].Value).ToArray(); 

Вы можете выбрать, какой выход вы хотите, а

List<string> regexResult = (from Match match in myIDsReg.Matches(myString) select match.Groups[1].Value).ToList(); 

или

IEnumerable<string> regexResult = (from Match match in myIDsReg.Matches(myString) select match.Groups[1].Value); 

Я бы предпочел, чтобы один из двух последних

+0

Мне пришлось немного изменить его, чтобы работать так, как мне нужно, чтобы он работал. Но это был лучший ответ для меня. Благодарю. –

4

Использование Matches вместо Match.

foreach (Match match in myIDsReg.Matches(myString)) 
{ 
    // etc... 
} 

Смотреть это работает онлайн: ideone

1

Трикки придумали лучший ответ. Мне просто пришлось немного изменить его, чтобы лучше работать для меня.

string myString = "blah blah **[10]** blah **[20]** and some more blah **[30]**"; 
Regex myIDsReg = new Regex(@"\*\*\[(\d+)\]\*\*"); 
string[] regexResult = (from Match match in myIDsReg.Matches(myString) select match.Groups[1].Value).ToArray(); 

Я в принципе заменить "выберите match.Value" с "выберите match.Groups [1] .Value".

Спасибо за помощь!

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