Это руководство делает вас мастером Наборы персонажей в питоне. (Я знаю, я знаю, чувствует себя круто, чтобы увидеть ваши глубокие желания, наконец, сбылись.)
Как я написал эту статью, я увидел много разных терминов, описывающих эту же мощную концепцию, такой как « Класс персонажей », « Диапазон символов », или « Группа персонажей ». Тем не менее, самый точный термин – это « набор символов », как введен в Официальный Python Regex Docs. Так что в этом руководстве я буду использовать этот термин на протяжении всего.
Связанная статья: Python Regex SuperPower – Ultimate Guide
Вы хотите освоить сверхдержаву Regeex? Проверьте мою новую книгу Самый умный способ изучать регулярные выражения в Python С инновационным 3-ступенчатым подходом для активного обучения: (1) Изучение книги главы, (2) Решите головоломки кода и (3) Смотреть воспроизведение главы видео.
Python Regex – набор символов
Итак, какой персонаж установлен в регулярных выражениях?
Набор символов (сюрприз) Набор символов: если вы используете набор символов в шаблоне регулярного выражения, вы сообщаете двигатель Regex, чтобы выбрать один произвольный символ из набора. Как вы можете знать, A Set – это неупорядоченная коллекция уникальных элементов Отказ Таким образом, каждый символ в наборе символов уникален, и заказ не имеет значения (с несколькими незначительными исключениями).
Вот пример набора символов, используемый в регулярном выражении:
>>> import re >>> re.findall('[abcde]', 'hello world!') ['e', 'd']
Вы используете Re.findall (Pattern, String) Метод Чтобы соответствовать шаблону '[ABCDE]'
В строке 'Привет, мир!'
Отказ Вы можете подумать обо всех персонажах A, B, C, D и E, как в том, что он в том, что он находится в том, что он является в том, что он находится в том, что он является в том, что он является в том, что он является в том, что он является в том, что он является в том, что он является в том, что он находится в том, что он является в том, что он является в том, что любой из них будет действительным матчем.
Двигатель REGEX идет слева направо, сканируя через строку «Hello World!» и одновременно пытается сопоставить (набор символов). Два персонажа из текста «Hello World!» Находятся в наборе символов – они являются действительными спичками и возвращены методом Re.findall ().
Вы можете упростить множество наборов символов, используя символ диапазона «-», который имеет особое значение в квадратных скобках: [AZ] читает «Сопоставить любой символ от A до z», а [0-9] гласит «Сопоставить любой символ от 0 до 9 “.
Вот предыдущий пример, упрощенный:
>>> re.findall('[a-e]', 'hello world!') ['e', 'd']
Вы даже можете объединить несколько диапазонов символов в одном наборе символов:
>>> re.findall('[a-eA-E0-4]', 'hello WORLD 42!') ['e', 'D', '4', '2']
Здесь вы соответствуете три диапазона: строчные буквы от A до E, заглавные буквы от A до E и номера от 0 до 4. Обратите внимание, что диапазоны включены, поэтому в диапазоне включены как начальные, так и стоп-символы.
Python Regex отрицательный набор символов
Но что, если вы хотите подобрать все персонажи – кроме некоторых? Вы можете достичь этого с отрицательным набором символов!
Отрицательный набор символов работает так же, как набор символов, но с одним разницей: он совпадает с всеми символами не в наборе персонажа.
Вот пример, который вы сопоставляете все последовательности символов, которые не содержат Персонажи A, B, C, D или E:
>>> import re >>> re.findall('[^a-e]+', 'hello world') ['h', 'llo worl']
Мы используем «AT-MIKE-CANTIVER +» в примере, который соответствует хотя бы одному возникновению предшествующего регенерации (если вы не уверены в том, как он работает, посмотрите мой подробный урок Finxter по поводу оператора Plus).
Существует только две такие последовательности: односимая последовательность «h» и восьмихимчаточная последовательность «LLO Worl». Вы можете видеть, что даже пустое пространство соответствует набору отрицательного символа.
Резюме: Набор отрицательных символов соответствует всем символам, которые не заключены в скобки.
Как исправить “Re.Error: неtermined персонаж набор на позиции”?
Теперь, когда вы знаете классы персонажей, вы можете легко исправить эту ошибку: это происходит, если вы используете отверстие (или закрытие) кронштейна «[» в своем шаблоне. Может быть, вы хотите сопоставить персонажа ‘ [‘В вашей строке?
Но Питон предполагает, что вы только что открыли персонаж-класс – и вы забыли закрыть его.
Вот пример:
>>> re.findall('[', 'hello [world]') Traceback (most recent call last): File "", line 1, in re.findall('[', 'hello [world]') File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\re.py", line 223, in findall return _compile(pattern, flags).findall(string) File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\re.py", line 286, in _compile p = sre_compile.compile(pattern, flags) File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\sre_compile.py", line 764, in compile p = sre_parse.parse(p, flags) File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 930, in parse p = _parse_sub(source, pattern, flags & SRE_FLAG_VERBOSE, 0) File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 426, in _parse_sub not nested and not items)) File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 532, in _parse source.tell() - here) re.error: unterminated character set at position 0
Ошибка происходит, потому что вы использовали символ кронштейна ‘ [‘Как будто это был нормальный символ.
Итак, как это исправить? Просто избегайте специального характера кронштейна ‘\ [‘ с одной обратной ячейкой:
>>> re.findall('\[', 'hello [world]') ['[']
Это удаляет «особый» значение символа кронштейна.
Связанные методы Re
Существует семь важных методов регулярного выражения, которые вы должны освоить:
- Re.findall (шаблон, строка) Метод возвращает список строковых совпадений. Читайте больше в Наше руководство в блоге Отказ
- Re.Search (шаблон, строка) Метод возвращает объект совпадения первого матча. Читайте больше в Наше руководство в блоге Отказ
- Re.match (шаблон, строка) Метод Возвращает объект совпадения, если установки Regeex в начале строки. Читайте больше в Наше руководство в блоге Отказ
- Re.fullmatch (шаблон, строка) Метод возвращает объект совпадения, если Regeex соответствует всей строке. Читайте больше в Наше руководство в блоге Отказ
- Re.compile (Pattern) Способ подготавливает шаблон регулярной экспрессии – и возвращает объект Regex, который вы можете использовать несколько раз в вашем коде. Читайте больше в Наше руководство в блоге Отказ
- Re.Split (шаблон, строка) Метод возвращает список строк, сопоставив все вхождения шаблона в строке и разделить строку вдоль тех. Читайте больше в Наше руководство в блоге Отказ
- Re.sub (Re.sub (Pattern, Repl, String ,,) Метод возвращает новую строку, в которой все вхождения шаблона в старой строке заменены на REPL. Читайте больше в Наше руководство в блоге Отказ
Эти семь методов составляют 80% от того, что вам нужно знать, чтобы начать работу с функциональностью регулярных выражений Python. Если вы хотите узнать больше, ознакомьтесь с наиболее полным учебным пособием Python Regex в мире!
Куда пойти отсюда?
Вы узнали все, что вам нужно знать о Python Regex набор символов Оператор.
Резюме :
Если вы используете набор символов [xyz] в шаблоне регулярного выражения, вы сообщаете двигатель Regex, чтобы выбрать один произвольный символ из набора: X, Y или Z.
Хотите заработать деньги, пока вы изучаете Python? Средние программисты Python зарабатывают более 50 долларов в час. Вы, безусловно, можете стать средним, не так ли?
Присоединяйтесь к свободному вебинару, которое показывает, как стать процветающим владельцем бизнеса в Интернете!
[Вебинар] Станьте шестифункциональным внештатным разработчиком с Python
Присоединяйтесь к нам. Это весело! 🙂.
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.