(?=...) совпадает, если ... совпадает с next , но не использует ни одной строки. Это называется предварительным утверждением. Например, Isaac (?=Asimov) будет совпадать 'Isaac ' только в том случае, если за ним следует 'Asimov'.
>>> import regex as re >>> match = re.findall(r'\w\w', 'hello', overlapped=True) >>> print match ['he', 'el', 'll', 'lo']
Ответ 3
За исключением утверждения нулевой длины, символ во входных данных всегда будет использоваться при сопоставлении. Если вы когда-нибудь столкнетесь с ситуацией, когда захотите захватить определенный символ во входной строке еще один раз, вам понадобится утверждение нулевой длины в регулярном выражении.
Существует несколько утверждений нулевой длины (например, ^ (начало ввода / строки), $ (конец ввода / строки), \b (граница слова)), но обходные пути ((?<=) положительный обзор сзади и (?=) положительный обзор вперед) - это единственный способ, которым вы можете захватить перекрывающийся текст из входных данных. Отрицательные обходные пути ((?<!) отрицательный обзор сзади, (?!) отрицательный прогноз вперед) здесь не очень полезны: если они утверждают true, то захват внутри завершается неудачей; если они утверждают false, то совпадение завершается неудачей. Эти утверждения имеют нулевую длину (как упоминалось ранее), что означает, что они будут утверждать, не используя символы во входной строке. Они фактически будут соответствовать пустой строке, если утверждение пройдет.
Применяя приведенные выше знания, регулярное выражение, которое работает в вашем случае, будет:
(?=(\w\w))
Ответ 4
Я не эксперт по регулярным выражениям, но я хотел бы ответить на свой аналогичный вопрос.
Если вы хотите использовать группу захвата с предпросмотром:
пример регулярного выражения: (\d)(?=.\1)
строка: 5252
это будет соответствовать первым 5, а также первым 2
(\d) Заключается в создании группы захвата, (?=\d\1) заключается в сопоставлении любой цифры, за которой следует группа захвата 1, без использования строки, что позволяет перекрывать