Первое, что приходит на ум, это использовать подобный паттерн
1 | string pattern = ((red.*green)|(green.*red)); |
Ну, а что делать, если надо проверить строку с десятком совпадений?
Все просто - можно использовать следующий паттерн:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | string pattern = (?=.*green)(?=.*red); string [] test = new string [] { "green\n bbbbb red aaaa" , "red\n bbbbb green aaaa" , "\n bbbbb green aaaa" }; foreach (var item in test) { bool isMatch = Regex.IsMatch(item, pattern, RegexOptions.IgnoreCase | RegexOptions.Singleline); Console.WriteLine( "Строка: {0} isMatch: {1}" ,item,isMatch ); } //Результат: Строка: "green\n bbbbb red aaaa" isMatch: true Строка: "red\n bbbbb green aaaa" isMatch: true Строка: "\n bbbbb green aaaa" isMatch: false |
В случае, если надо проверить строку, содержащую набор определенных слов, но при этом в строке не должно быть некоторых других слов, можно использовать следующий паттерн.
Например нам нужно найти текст содержащий слова green и red, но в котором нет слов yellow или white.
1 | string pattern = (?(^((?!yellow)(?!white).)*$)(?=.*green)(?=.*red)|(^((?!yellow)(?!white).)*$)); |
Статья на википедии
Онлайн тест регулярных выражений
Комментариев нет:
Отправить комментарий