2013-08-22 3 views
0

У меня есть многострочный текст, и я хочу найти строки, содержащие определенное слово.Получить целую строку, где Regex соответствует

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

var finder = new Regex(@"(^|\W)" + Regex.Escape(wordToFind) + @"(\W|$)", RegexOptions.IgnoreCase); 
foreach (var match in finder.Matches(multilineString)) 
{ 
     //match should be the whole line 
} 

Пример:

If Request.QueryString("bar") <> "" Then 
    Set bar= foo("baz") 
Else 
    Set bar= foo("baz2") 
End If 

Если я смотрю на foo я должен получить:

Set bar= foo("baz") 
Set bar= foo("baz2") 

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

Благодаря

+0

Добавить. * .... * \ N где-нибудь в вашем регулярном выражении. – mathk

+2

Возможно, попробуйте '@" ^. *? " + Regex.Escape (wordToFind) + @ ". *? $" '? '^' соответствует началу строки или строки, '. *?' соответствует всем (но только по мере необходимости), '$' соответствует концу строки или строки. – Nolonar

+0

@Nolonar, что является точкой вашего '?' – mathk

ответ

1

Вы можете попробовать с этим регулярным выражением:

Regex regex = new Regex(@"^.*?\W" + Regex.Escape(wordToFind) + @"\W.*?$"); 

^ соответствует началу строки или строки, номер $ в конце соответствует концу строки или строки.
.*? соответствует всем (но как можно меньше) и \W (верхний регистр «W») соответствует любому символу без слова (символы, которые не являются ни буквой, ни цифрой).

Альтернативно вы можете использовать \s (в нижнем регистре) вместо \W, если вы хотите, чтобы ваши слова были разделены пробелами.

Here is a good reference for Regex.

0

Вы можете сделать это, как этот

string[] lines = multilinestring.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); 
List<string> validString = new List<string>(); 
foreach(string s in lines) 
{ 
    if(finder.Match(s).Success) 
    { 
     validString.Add(s); 
    } 
} 

дать это попробовать также, должны работать

List<string> lines = multilinestring.Split(new string[] { Environment.NewLine }, StringSplitOptions.None).ToList(); 
List<string> validString = lines.Where(x => finder.IsMatch(x)).ToList(); 
+0

Извините, для этого мне понадобится Regex. Я тестировал свой код и работал, но он в 2 раза медленнее, чем с Regex. – margabit

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