Рубрики
Без рубрики

Python Regex Несколько повторной ошибки повторения

Так же, как я час назад, вы, вероятно, сидите перед вашим регулярным кодом выражения, озадачены странным сообщением об ошибке: Re.Error: несколько повторите в положении x Почему он поднимает? Откуда это взялось? И, самое главное, как вы можете избавиться от этого? Эта статья дает вам ответы на все … Python Regeex Несколько повторной ошибки повторения Подробнее »

Автор оригинала: Chris.

Также как я час назад, вы, вероятно, сидите перед вашим регулярным кодом выражения, озадачены странным сообщением об ошибке:

re.error: multiple repeat at position x

Почему это подняло? Откуда это взялось? И, самое главное, как вы можете избавиться от этого?

Эта статья дает вам ответы на все эти вопросы. В качестве альтернативы вы также можете посмотреть мое короткое видео об объяснении, которое показывает вам реальный, как разрешить эту ошибку:

Связанная статья: Python Regex SuperPower – Ultimate Guide

Как возникает множественная повторяющаяся ошибка в Python Re?

Python’s Regex Библиотека Re бросает несколько ошибок повторения, когда вы стекаете два квантализатора Regex друг на друге. Например, рисунок Regex 'A ++' приведет к нескольким повторной ошибке. Вы можете избавиться от этой ошибки, избегая, чтобы стечь количественными квантами друг на друга.

Вот пример:

>>> import re
>>> re.findall('a++', 'aaaa')
Traceback (most recent call last):
  File "", line 1, in 
    re.findall('a++', 'aaaa')
  File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\re.py", line 223, in findall
   ...
re.error: multiple repeat at position 2

Я сократил сообщение об ошибке, чтобы сосредоточиться на соответствующих частях. В коде вы впервые импортируете библиотеку Regex Re Отказ Вы тогда используете Re.findall (шаблон, строка) Функция ( См. Учебное пособие в блоге ) Чтобы найти шаблон 'A ++' В строке «АААА» Отказ

Однако это не имеет большого смысла: в чем смысл шаблона a++ в любом случае? Имея один квантификатор A + уже читает как «Найти все матчи, где хотя бы один символ 'A' Матчи» Отказ

Вы хотите освоить сверхдержаву Regeex? Проверьте мою новую книгу Самый умный способ изучать регулярные выражения в Python С инновационным 3-ступенчатым подходом для активного обучения: (1) Изучение книги главы, (2) Решите головоломки кода и (3) Смотреть воспроизведение главы видео.

[Советы] Как источник ошибки нескольких повторов и как его избежать?

Ошибка происходит, если вы используете Python Regex Пакет Re Отказ Есть много разных причин, но все они имеют одинаковый источник: вы стекаете количественные кванты друг на друга друг на друга.

Если вы не знаете, что такое квантификатор, прокрутите вниз и прочитайте следующий подраздел, где я показываю, что именно то, что оно есть.

Вот список причин для сообщения об ошибке. Может быть, ваша причина в том числе?

  • Вы используете шаблон Regex 'X ++' Для любого выражения Regex X . Чтобы избежать этой ошибки, избавьтесь от одного квантификатора.
  • Вы используете шаблон Regex 'Х + *' Для любого выражения Regex X . Чтобы избежать этой ошибки, избавьтесь от одного квантификатора.
  • Вы используете шаблон Regex 'X **' Для любого выражения Regex X . Чтобы избежать этой ошибки, избавьтесь от одного квантификатора.
  • Вы используете шаблон Regex 'X {m, n} *' Для любого выражения Regex Х и количество повторений м и N Отказ Чтобы избежать этой ошибки, избавьтесь от одного квантификатора.
  • Вы пытаетесь сопоставить ряд персонажей '+' и используйте второй квантификатор поверх этого, как '+?' . В этом случае вы должны избежать первого символа квантификатора '\ +' Отказ
  • Вы пытаетесь сопоставить ряд персонажей '*' и используйте второй квантификатор поверх этого, как '* +' Отказ Избегайте этой ошибки, избегая первого символа квантификатора '\ *' Отказ

Часто ошибка появляется, если вы не избежите специального квантификатора мета-символов в вашем рисунке Regex.

Вот a Stackoverflow Пост, который показывает какой-то код, где это произошло:

...
term = 'lg incite" OR author:"http++www.dealitem.com" OR "for sale'
p = re.compile(term, re.IGNORECASE)  
...

Я отредактировал данный фрагмент кода, чтобы показать важную роль. Код терпит неудачу из-за Ошибка нескольких повторов . Вы видите почему?

Причина в том, что регеекс «LG Incite» или автор: «HTTP ++ www.dealitem.com» или "на продажу ' Содержит два плюс количественных квантов, сложенных друг на друга в подстроке 'http ++' Отказ Избавьтесь от тех, и код снова запустится!

Python Regex Quebifiers

Слово квантификатор Возникает из латыни: это значение Кванс много/Как часто Отказ

Это именно то, что означает регулярное определение количества выражений: вы сообщите двигателю REGEX, как часто вы хотите сопоставить данный шаблон.

Если вы считаете, что вы не определяете какой-либо квантификатор, вы делаете это неявно: никакого количества означает совпадение регулярного выражения ровно.

Так Каковы квантования Regeex в Python?

Квантификатор Имея в виду
А? Сопоставить регулярное выражение ноль или один раз
A* Сопоставить регулярное выражение нуля или более раз
A+ Сопоставить регулярное выражение единое или несколько раз
Являюсь} Соответствовать регулярному выражению точно M раз
A {m, n} Соответствовать регулярному выражению между m и n раз (включая)

Обратите внимание, что в этом руководстве я предполагаю, что у вас есть хотя бы удаленное представление о том, какие регулярные выражения на самом деле являются. Если у вас нет проблем, не ознакомьтесь с моим подробным руководством REGEX в этом блоге.

Вы видите в таблице, что квантаторы ? , * , + , {м} и {m, n} Определите, как часто вы повторяете сопоставление Regex A .

Давайте посмотрим на некоторые примеры – один для каждого квантификатора:

>>> import re
>>> re.findall('a?', 'aaaa')
['a', 'a', 'a', 'a', '']
>>> re.findall('a*', 'aaaa')
['aaaa', '']
>>> re.findall('a+', 'aaaa')
['aaaa']
>>> re.findall('a{3}', 'aaaa')
['aaa']
>>> re.findall('a{1,2}', 'aaaa')
['aa', 'aa']

В каждой строке вы попробуйте другой квантификатор на одном тексте «АААА» Отказ И, интересно, каждая строка приводит к другому выходу:

  • нулевой или один Regex 'а? соответствует четыре раза один «А» Отказ Обратите внимание, что он не соответствует нулевым символам, если он может избежать этого.
  • ноль или-другое Regex « A * ' совпадает раз в четырех «А» и поглощает их. В конце строки он все еще может сравниться с пустой строкой.
  • одно- или больше Regex 'A +' совпадает раз в четырех «А» s. В отличие от предыдущего квантификатора, он не может сравниться с пустой строкой.
  • Повторяющееся регеекс 'a {3}' соответствует до трех «А» S за один пробег. Это может сделать это только один раз.
  • Повторяющееся регеекс 'А {1,2}' совпадает с одним или двумя «А» s. Он пытается соответствовать как можно больше.

Вы узнали основные кванты регулярных выражений Python.

Альтернативное сообщение об ошибке (фрагменты)

Вы можете столкнуться с любым из следующих фрагментов, которые все приводят к ошибке нескольких повторов:

  • Re.Error: множественный повтор в положении
  • Многократный повтор в положении
  • sre_constants.Error: множественный повтор
  • Python Regex Несколько повторов
  • Python Re несколько повторять
  • Regex Несколько повторов
  • Re.error Многократный повтор в положении

Опять же, вы можете исправить ошибку нескольких повторов, избегая укладывающую два кванты Regex друг на друге. Например, рисунок Regex 'A ++' приведет к тому, что множественная повторяющаяся ошибка – используйте один квантификатор, такой как 'A +' вместо.

Куда пойти отсюда?

Чтобы обобщить, вы узнали, что появится сообщение с несколькими повторениями, когда вы пытаетесь складывать несколько квантов друг на друга. Избегайте этого, и сообщение об ошибке исчезнет.

Если вы хотите повысить навыки Python Regex на следующий уровень, проверьте мое бесплатное угрожающее руководство по нескольким углублению Regeex (20 000+). Или просто заблокировал статью для позже прочитанной.

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Оригинал: “https://blog.finxter.com/python-regex-multiple-repeat-error/”