Вот краткий чат о жадности и пессимистичности c:
Вот тестовые данные:
Example word followed by another word and then more
Вот два регулярных выражения:
Example.*word
Example.*?word
Первый жадный. Регулярное выражение будет соответствовать Example
, затем потребуется .*
, которое потребляет все до конца строки, и работы возвращаются назад, выпуская символ за раз, пытаясь добиться успеха. Это будет успешным, когда Example word followed by another word
соответствует, * соответствует word followed by another
(и пробелам на обоих концах)
Второе пессимистично; он грыз вперед вдоль строки по одному символу за раз, пытаясь сопоставить. Регулярное выражение будет соответствовать Example
, затем в подстановочный знак .*?
добавится еще один символ, затем проверит, нашло ли оно word
, что и было. Так что pessimisti c match найдет только один пробел, а полное совпадение в режиме pessimisti c равно Example word
Поскольку вы говорите, что хотите всю строку после примера, я рекомендую использовать жадный квантификатор, так он просто сразу берет всю оставшуюся строку и объявляет совпадение, вместо того, чтобы покусывать вперед по одному (медленно)
Это затем сопоставит (и перехватит) все после примера:
\sExample(.*)
Скобки составляют группу захвата. В c# мы можем назвать группу, используя ?<namehere>
в начале скобок, а затем все, что совпадает с *, можно получить с помощью:
Regex r = new Regex("\sExample(?<x>.*)");
Match m = r.Match("Exampleblahblah");
Console.WriteLine(m.Groups["x"].Value); //prints: blahblah
Обратите внимание, что если ваши данные содержат переводы строк, вы должны отметить который . не соответствует символу новой строки, если вы не включили RegexOptions.SingleLine при создании регулярного выражения