Регулярные выражения: поиск ДВУХ слов
Я использую очень простые регулярные выражения (только начал пользоваться), и, например, могу написать
string src1 = "А в этой строке есть хоть одно слово?";
string src2 = "А в этой?";
if (Regex.IsMatch(src1, @"\w*слово\w*"))
Console.WriteLine(src1);
if (Regex.IsMatch(src2, @"\w*слово\w*"))
Console.WriteLine(src2);
При этом напечатается первая из двух строк.
Усложним задачу.
Пусть я хочу найти строки, в которых встречаются два известных мне слова (пусть в определеном порядке) одновременно, возможно, разделенные еще чем то.
Я пробую такой паттерн: \w*хоть\w*слово\w* - не получается.
Как это принято делать? желательно попроще...
Спасибо!
Ответы (2 шт):
Нашел
Паттерн будет @"\w*(хоть.*слово)\w*"
Точка означает любой символ, а звездочка - что он может быть, может не быть, а если быть - то сколько угодно раз.
Почему при этом не срабатывает такой паттерн - @"\w*(хоть\w*слово)\w*" - я не понимаю...
static void Main(string[] args)
{
string src1 = "А в этой строке есть хоть одно слово?";
string src2 = "А в этой?";
string pattern = @"хоть.+слово"; // 2 слова в определенном порядке, но не слитно
Console.WriteLine(Regex.Matches(src1, pattern).Count);
Console.WriteLine(Regex.Matches(src2, pattern).Count);
}
Вывод в консоль
1
0