Как сделать так, чтобы регулярное выражение совпадало только тогда, когда совпадают более двух групп? - PullRequest
0 голосов
/ 11 января 2019

Как сделать так, чтобы квантификатор совпадал, только если найдено хотя бы 2 сгруппированных слова?

Мне нужно это соответствие: ((?i:\bjack\b)|(?i:\bjill\b)|(?i:\bjohn\b)){2,}

https://i.imgur.com/sM2ZhW9.png

И мне нужно, чтобы это не совпадало:

https://i.imgur.com/V5eHOYi.png

Match if >= 2 of the words are found, in any order and case

Как мне это сделать? Через несколько часов я устал от чтения регулярных выражений. Благодаря!

Ответы [ 2 ]

0 голосов
/ 11 января 2019
((jack.*)|(john.*)|(jill.*)){2,}

даст совпадение для

Джек и Джилл поднялись в гору

Джек и Джон влюблены

Джилл и Джон разрушают идеальный дом

но не для

Джон знаком с антиутопическим видением

Джек ест лук

0 голосов
/ 11 января 2019

Вы можете сделать:

re, _ := regexp.Compile(`\b(?i:jack|jill|john)\b`)
ma := re.FindAllString("Jill is friends with John. But Jack doesn't know.", -1)
if len(ma) < 2 //...then there aren't enough matches.

В качестве альтернативы, (\b(?i:jack|jill|john)\b.*){2,} делает то, что вы хотите, я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...