2013-03-08 2 views
1

У меня есть эта строка:регулярных выражений группы в .NET

of cabbages and kings and more kings 

Я хочу, чтобы соответствовать на основе этого критерия:

- Any instance of "king" 
- Any instances of "cab" OR "goat" 
- No instances of "bill" 

Это регулярное выражение работает для IsMatch():

^(?=.*?(king))(?=.*?(cab|goat))(?=.*?(bill)) 

Но он просто возвращает 1 группу с длиной 0. Есть ли способ, чтобы он возвращал соответствующие группы, чтобы мы могли прочитать согласованный текст после?

+0

Не работает (если только ваш spec не соответствует действительности) и что соответствует тексту? Вы имеете в виду всю строку? – Qtax

+0

Можете ли вы опубликовать ввод и ожидаемый результат? – VladL

+0

Аналогичный вопрос: http://stackoverflow.com/questions/469913/regular-expressions-is-there-an-and-operator –

ответ

1

Потому что ваше использование шаблона только lookarounds, это будет только проверки для шаблона, но никогда не будет включать в себя подходящий шаблон кромени одной из групп в lookarounds ..

Если вы хотите, чтобы захватить полную строку , использовать метод Match с заданным рисунком

^(?=.*king)(?=.*(?:cab|goat))(?=.*bill).*$ 

Это регулярное выражение будет соответствовать полной строки в группе , если он совпадает с рисунком.

+0

Вместо того, чтобы сопоставлять всю строку, можно ли возвращать совпадения (или группы) для каждого термин «король» и «кабина»? –

+0

@JonTackabury да .. вы должны использовать метод 'match'. Ваше регулярное выражение будет работать отлично. Если бы оно захватывало слова в lookahead, так как вы используете группы в lookahead .. – Anirudha

+0

Кажется, что это просто целая строка, а не только те части, которые соответствуют, например, «король». –

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