Этот учебник все о И оператор Python’s Re библиотека Отказ Вы можете спросить: что? (И справедливо так.)
Конечно, есть оператор или оператор (пример: 'iPhone | iPad'
). Но в чем смысл соответствовать одному регулярному выражению и другому?
Существуют различные интерпретации и оператора в регулярном выражении (Regex):
- Заказал : Соответствовать одному рисунку Regex за другим. Другими словами, вы сначала матча шаблон
А
А потом вы совпадаете с шаблономB
Отказ Здесь ответ прост: вы используете шаблонAB
соответствовать обоим. - Неупорядоченные : Сопоставьте несколько шаблонов в строке, но без определенного порядка ( Источник ). В этом случае вы будете использовать подход мешок слов.
Я обсужу оба в следующем. (Вы также можете посмотреть видео, как вы читаете учебное пособие.)
Связанная статья: Python Regex SuperPower – Ultimate Guide
Вы хотите освоить сверхдержаву Regeex? Проверьте мою новую книгу Самый умный способ изучать регулярные выражения в Python С инновационным 3-ступенчатым подходом для активного обучения: (1) Изучение книги главы, (2) Решите головоломки кода и (3) Смотреть воспроизведение главы видео.
Заказанный Python Regex и оператор
Учитывая строку. Скажем, ваша цель – найти все подстроки, которые соответствуют строке «iPhone» с последующим строкой ‘iPad’ Отказ Вы можете просмотреть это как и оператор двух регулярных выражений. Как вы можете достичь этого?
Простое и эксплуатация обоих строк является регулярным образцом выражения iphoneipad .
В следующем примере вы хотите сопоставить шаблон «AAA» и BBB’-в этом порядке.
>>> import re >>> text = 'aaabaaaabbb' >>> A = 'aaa' >>> B = 'bbb' >>> re.findall(A+B, text) ['aaabbb'] >>>
Вы используете метод re.findall (). Если вы этого не знаете, вот определение из статьи блог Finxter:
Метод Re.findall (Pattern, String) находит все вхождения шаблона в строке и возвращает список всех совпадающих подстроек.
Пожалуйста, обратитесь к статью в блоге, чтобы узнать все, что вам нужно знать об этом фундаментальном методе Python.
Первый аргумент – это шаблон A + B
который оценивает «Ааббб»
Отказ Ничего не нравится об этом: каждый раз, когда вы пишете строку, состоящую из более чем одного символа, вы, по сути, используете заказал И оператор.
Второй аргумент – это текст 'aabaaaaabbb'
который вы хотите искать шаблон.
Результат показывает, что в тексте есть соответствующая подстрока: «Ааббб»
Отказ
Неупорядоченный Python Regex и оператор
Но что, если вы хотите найти данный текст для шаблона А
И шаблон B
-Ну, нет конкретного порядка? Другими словами: если оба образца появляются в любом месте строки, вся строка должна быть возвращена в виде совпадения.
Теперь это немного сложнее, потому что какая-либо регулярная структура выражения заказывается слева направо. Простое решение – использовать Alahead Assertion (?. * А)
Чтобы проверить ли Regex А
появляется в любом месте строки. (Обратите внимание, что мы принимаем одну строку строки как . *
Pattern не соответствует символу Newline по умолчанию.)
Сначала посмотрим на минимальное решение для проверки двух шаблонов в любом месте строки (скажем, узоры «Привет»
и «Вы»
).
>>> import re >>> pattern = '(?=.*hi)(?=.*you)' >>> re.findall(pattern, 'hi how are yo?') [] >>> re.findall(pattern, 'hi how are you?') ['']
В первом примере оба слова не появляются. Во втором примере они делают.
Но как работает Alahead Assertion? Вы должны знать, что любой другой рисунок Regex «потребляет» соответствующую подстроку. Потребляемая подстрока не может быть сопоставлена любой другой частью Regex.
Думайте о утверждении Lookahead в качестве непоглощающего списка шаблонов. Двигатель REGEX идет слева направо – поиск шаблона. В каждой точке он имеет одну «текущую» положение для проверки, является ли эта позиция первой позиции оставшегося совпадения. Другими словами, двигатель REGEX пытается «потреблять» следующий символ как (частичное) совпадение шаблона.
Преимущество выражения Lookahead заключается в том, что он не потребляет ничего. Это просто «выглядит вперед», начиная с текущей позиции, следует ли сделать то, что теоретически соответствует образе узора. Если это не так, двигатель Regex не может двигаться дальше.
Давайте вернемся к выражению (? =. * Привет) (? =. * ты)
Сопоставить строки, которые содержат оба «Привет»
и «Вы»
Отказ Почему это работает?
Причина в том, что выражения Lookahead не потребляют ничего. Вы сначала поищите произвольное количество персонажей . *
следуют слово привет
Отказ Но поскольку двигатель Regex ничего не употреблял, это все еще в То же самое положение в начале строки Отказ Итак, вы можете повторить то же самое для слова Вы
Отказ
Обратите внимание, что этот метод не заботится о порядке двух слов:
>>> import re >>> pattern = '(?=.*hi)(?=.*you)' >>> re.findall(pattern, 'hi how are you?') [''] >>> re.findall(pattern, 'you are how? hi!') ['']
Независимо от того, какое слово "Привет"
или "Вы"
Появится первым в тексте, двигатель Regex находит обоими.
Вы можете спросить: почему вывод пустой строки? Причина в том, что двигатель Regex не употреблял какой-либо характер. Он только что проверил поиск. Таким образом, простое решение – потреблять всех символов следующим образом:
>>> import re >>> pattern = '(?=.*hi)(?=.*you).*' >>> re.findall(pattern, 'you fly high') ['you fly high']
Теперь вся строка – это матч, потому что после проверки Lookahead с '(? =. * Привет) (? =. * ты)'
Вы также употребляете всю строку '. *'
Отказ
Python Regex нет
Как вы можете искать строку для подстроки, которые не соответствуют данному шаблону? Другими словами, какой «негативный рисунок» в регулярных выражениях Python?
Ответ в два раза:
- Если вы хотите сопоставить всех персонажей, кроме набора конкретных символов, вы можете использовать отрицательный класс символов
[^ ...]
Отказ - Если вы хотите сопоставить все подстроки, кроме тех, которые соответствуют шаблону Regex, вы можете использовать функцию Отрицательный взгляд
(?! ...)
Отказ
Вот пример для отрицательного класса символов:
>>> import re >>> re.findall('[^a-m]', 'aaabbbaababmmmnoopmmaa') ['n', 'o', 'o', 'p']
И вот пример для негативного образца Lookahead соответствует всем «словам, которые не за ними»:
>>> re.findall('[a-z]+(?![a-z]+)', 'hello world') ['hello', 'world']
Отрицательный вид (?! [A-Z] +)
не потребляет ( совпадение ) любой символ. Это просто проверяет ли шаблон [A-Z] +
не совпадает в данной позиции. Единственные времена это происходит, просто перед пустым пространством и концом строки.
[Коллекция] Каковы различные квантификаторы Python Re?
Операторы «и», «или», а «и« не »не являются единственными операторами регулярных выражений, которые вам нужно понять. Так каковы другие операторы?
Далее вы получите быстрый и грязный обзор наиболее важных операций REGEX и как их использовать в Python. Вот самые важные квантификаторы Regex:
Квантификатор | Описание | Пример |
. | Wild-Card («DOT») соответствует любому символу в строке, кроме нового символа «N». | Regex ‘…’ соответствует всем словам с тремя символами, такими как «abc», «Cat» и «собака». |
* | Звездочка нулевой или больше соответствует произвольному количеству вхождений (включая нулевые вхождения) непосредственно предшествующего Regex. | Regex ‘Cat *’ соответствует строкам «CA», «CAT», «CATT», «CATTT» и «CATTTTTTT». |
? | Матчи ноль или один (как следует из названия) либо ноль, либо в одних случаях непосредственно предшествующего Regex. | Regex ‘Cat?’ Соответствует обеим струнам «Ca» и «CAT» – но не «CATT», «CATTT» и «CATTTTTTT». |
+ | По меньшей мере, один соответствует одному или нескольким вхождению непосредственно предшествующего регеек. | Regex ‘Cat +’ не соответствует строке «CA», а соответствует всем строкам, по меньшей мере, одним задним характером «T», такими как «кошка», «CATT» и «CATTT». |
^ | Начальная строка соответствует началу строки. | Regex ‘^ p’ соответствует строкам «Python» и «программирование», но не «Lisp» и «шпионить», где символ «p» не происходит в начале строки. |
$ | Конец строки соответствует концу строки. | Regex ‘Py $’ будет соответствовать строкам «Main.py» и «Pypy», но не строки «Python» и «pypi». |
A | B. | Или соответствует либо Regex A или Regeex B. Обратите внимание, что интуиция сильно отличается от стандартной интерпретации или оператора, который также может удовлетворить оба условия. | Regex ‘(Hello) | (Привет) «Соответствует строки« Hello World »и« Привет Python ». Было бы не иметь смысла попытаться сопоставить их обоих одновременно. |
Аб | И и совпадает с первым Regex A и вторым Regex B, в этой последовательности. | Мы уже видели его тривиально в Regex ‘Ca’, которое соответствует первым Regex ‘C’ и Second Regex ‘A’. |
Обратите внимание, что я дал вышеупомянутые операторы некоторых более значимых имен (жирным шрифтом), чтобы вы могли немедленно понять цель каждого Regex. Например, оператор «^» обычно обозначается как оператор «Caret». Эти имена не описаны, поэтому я придумал более детские самые слов, такие как оператор «Start of String».
Мы уже видели много примеров, но давайте погрузимся еще больше!
import re text = ''' Ha! let me see her: out, alas! he's cold: Her blood is settled, and her joints are stiff; Life and these lips have long been separated: Death lies on her like an untimely frost Upon the sweetest flower of all the field. ''' print(re.findall('.a!', text)) ''' Finds all occurrences of an arbitrary character that is followed by the character sequence 'a!'. ['Ha!'] ''' print(re.findall('is.*and', text)) ''' Finds all occurrences of the word 'is', followed by an arbitrary number of characters and the word 'and'. ['is settled, and'] ''' print(re.findall('her:?', text)) ''' Finds all occurrences of the word 'her', followed by zero or one occurrences of the colon ':'. ['her:', 'her', 'her'] ''' print(re.findall('her:+', text)) ''' Finds all occurrences of the word 'her', followed by one or more occurrences of the colon ':'. ['her:'] ''' print(re.findall('^Ha.*', text)) ''' Finds all occurrences where the string starts with the character sequence 'Ha', followed by an arbitrary number of characters except for the new-line character. Can you figure out why Python doesn't find any? [] ''' print(re.findall('n$', text)) ''' Finds all occurrences where the new-line character 'n' occurs at the end of the string. ['n'] ''' print(re.findall('(Life|Death)', text)) ''' Finds all occurrences of either the word 'Life' or the word 'Death'. ['Life', 'Death'] '''
В этих примерах вы уже видели специальный символ «N», который обозначает новую линию в Python (и большинство других языках). Есть много специальных символов, специально предназначенных для регулярных выражений. Далее мы обнаружим наиболее важные специальные символы.
Связанные методы Re
Существует семь важных методов регулярного выражения, которые вы должны освоить:
- Re.findall (шаблон, строка) Метод возвращает список строковых совпадений. Читайте больше в Наше руководство в блоге Отказ
- Re.Search (шаблон, строка) Метод возвращает объект совпадения первого матча. Читайте больше в Наше руководство в блоге Отказ
- Re.match (шаблон, строка) Метод Возвращает объект совпадения, если установки Regeex в начале строки. Читайте больше в Наше руководство в блоге Отказ
- Re.fullmatch (шаблон, строка) Метод возвращает объект совпадения, если Regeex соответствует всей строке. Читайте больше в Наше руководство в блоге Отказ
- Re.compile (Pattern) Способ подготавливает шаблон регулярной экспрессии – и возвращает объект Regex, который вы можете использовать несколько раз в вашем коде. Читайте больше в Наше руководство в блоге Отказ
- Re.Split (шаблон, строка) Метод возвращает список строк, сопоставив все вхождения шаблона в строке и разделить строку вдоль тех. Читайте больше в Наше руководство в блоге Отказ
- Re.Sub (Re of Sub (Pattern, REPL, String,) Метод возвращает новую строку, в которой все вхождения шаблона в старой строке заменены на REPL. Читать дальше в Учебник нашего блога .
Эти семь методов составляют 80% от того, что вам нужно знать, чтобы начать работу с функциональностью регулярных выражений Python.
Куда пойти отсюда?
Вы узнали все, что вам нужно знать о Python Regex и Оператор.
Резюме :
Существуют различные интерпретации и оператора в регулярном выражении (Regex):
- Приказал : Соответствовать одному рисунку Regex за другим. Другими словами, вы сначала матча шаблон
A
А потом вы совпадаетеB
Отказ Здесь ответ простой: вы используете шаблонАб
соответствовать обоим. - Неупорядоченный : Сопоставьте несколько шаблонов в строке, но без определенного порядка. В этом случае вы будете использовать подход мешок слов.
Хотите заработать деньги, пока вы изучаете Python? Средние программисты Python зарабатывают более 50 долларов в час. Вы, безусловно, можете стать средним, не так ли?
Присоединяйтесь к свободному вебинару, которое показывает, как стать процветающим владельцем бизнеса в Интернете!
[Вебинар] Станьте шестифункциональным внештатным разработчиком с Python
Присоединяйтесь к нам. Это весело! 🙂.
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.