У меня есть текст со словами, разделенными .
, с экземплярами 2 и 3 последовательных повторяющихся слов:
My.name.name.is.Inigo.Montoya.You.killed.my.father.father.father.Prepare.to.die-
Мне нужно сопоставить их независимо с регулярным выражением, исключая дубликаты из троек.
Так как есть макс. 3 последовательных повторяющихся слова, это
r'\b(\w+)\.+\1\.+\1\b'
successfully catches
father.father.father
Однако, чтобы поймать 2 последовательных повторяющихся слова, мне нужно убедиться, что следующее и предыдущее слова не совпадают. Я могу сделать отрицательный прогноз
r'\b(\w+)\.+\1(?!\.+\1)\b'
но мои попытки негативной оценки
r'(?<!(\w)\.)\b\1\.+\1\b(?!\.\1)'
либо вернуть проблему с фиксированной шириной (когда я сохраняю +
), либо какую-то другую проблему.
Как мне исправить негативную ретроспективу?
regex
, которая является альтернативной библиотекой регулярных выражений, позволяющей смотреть назад. - person BrenBarn   schedule 26.07.2017\.+
, это предназначено? Посмотрите эту демонстрацию. Вы ищете что-то подобное? - person Wiktor Stribiżew   schedule 26.07.2017\b(\w+)(?:\.(\1)(?:\.\1)+|\.(\1))\b
Совпадения в группе 3 являются дубликатами, совпадения в группа 2 - это три или более захваченных слов. - person bobble bubble   schedule 26.07.2017