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

Python Re * – Quantifier Asterisk для регулярных выражений

Каждый компьютерный ученый знает вентилификатор звездочка регулярных выражений. Но многие не техники это тоже знают. Каждый раз, когда вы ищете текстовый файл * .txt на вашем компьютере, вы используете оператор Asterisk. Но как это работает? Эта статья все о квантификаторе Asterisk * в библиотеке Python’s Re. Изучите это тщательно и освоить … Python Re * – staverisk Quantifier для регулярных выражений Подробнее »

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

Каждый компьютерный ученый знает вентилификатор звездочка регулярных выражений. Но многие не техники это тоже знают. Каждый раз, когда вы ищете текстовый файл * .txt На вашем компьютере вы используете оператор Asterisk. Но как это работает?

Эта статья все о звездочка * Контификатор в Python’s Re библиотека Отказ Изучите это внимательно и овладеть этим важным знанием один раз и для всех!

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

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

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

Какой квантификатор Python Re *?

При применении к регулярному выражению А , Питон A * Контификатор соответствует нулю или более вхождению А Отказ Звезда * Символ называется звездочка или Оператор подстановки И это относится к предыдущему регулярному выражению. Например, регулярное выражение «Да *» соответствует строкам 'ye' , «Да» и «YESSSSSSS» Но не пустая строка '' Отказ

Давайте изучим два основных примера, чтобы помочь вам получить более глубокое понимание. Вы все их получаете?

>>> import re
>>> text = 'finxter for fast and fun python learning'
>>> re.findall('f.* ', text)
['finxter for fast and fun python ']
>>> re.findall('f.*? ', text)
['finxter ', 'for ', 'fast ', 'fun ']
>>> re.findall('f[a-z]*', text)
['finxter', 'for', 'fast', 'fun']
>>> 

Не волнуйтесь, если у вас были проблемы, понимая эти примеры. Вы узнаете о них дальше. Вот первый пример:

Пример жадного звездочка

>>> re.findall('f.* ', text)
['finxter for fast and fun python ']

Вы используете Re.findall () метод. Если вы этого не знаете, вот определение из Блог Finxter :

То Re.findall (шаблон, строка) Метод находит все вхождения шаблон в нить и возвращает список всех подходящих подстрок.

Пожалуйста, обратитесь к статью в блоге, чтобы узнать все, что вам нужно знать об этом фундаментальном методе Python.

Первый аргумент – это шаблон регулярного выражения 'f. *' Отказ Второй аргумент – это строка для поиска шаблона. На простом английском вы хотите найти все шаблоны в строке, которая начинается с символа 'f' с последующим произвольным количеством необязательных персонажей, а затем пустое пространство.

findall () Метод возвращает только одну подходящую подстроку: 'Finxter для быстрого и веселого Python' Отказ Quantifier Asterisk * жадный Это означает, что он пытается сопоставить как можно больше вхождений предыдущего регулятора. Таким образом, в нашем случае он хочет сопоставить как можно больше произвольных персонажей, чтобы узор до сих пор подобран. Следовательно, двигатель Regex «потребляет» все предложение.

Пример не жадного звездочка

Но что, если вы хотите найти все слова, начинающиеся с 'f' ? Другими словами: как сопоставить текст с не жадным оператором Asterisk?

Второй пример следующий:

>>> re.findall('f.*? ', text)
['finxter ', 'for ', 'fast ', 'fun ']

В этом примере вы смотрите на аналогичный образец только с одним разницей: вы используете не жадный оператор Asterisk *? Отказ Вы хотите найти все вхождения символа 'f' сопровождаемый произвольным количеством персонажей (но как можно меньше), а затем пустое пространство.

Следовательно, двигатель REGEX находит четыре матча: строки 'finxter' , «Для ' , «быстрый» и «Веселье» Отказ

Asterisk + Пример символов

Третий пример следующий:

>>> re.findall('f[a-z]*', text)
['finxter', 'for', 'fast', 'fun']

Это Regex достигает почти то же самое: нахождение всех слов, начинающихся с F Отказ Но вы используете квантификатор Asterisk в сочетании с классом символов, который конкретно определяет, какие символы являются действительными совпадениями.

В классе персонажа вы можете определить диапазоны символов. Например, диапазон символов [A-Z] соответствует одному символу строчных букв в алфавите во время диапазона символов [A-Z] соответствует одному прописшему символу в алфавите.

Но обратите внимание, что пустое пространство не является частью класса символов, поэтому он не будет соответствовать, если оно появится в тексте. Таким образом, результат является одним и тем же списком слов, начинающихся с символа 'f' : 'finxter' , «Для ' , «быстрый» и «Веселье» Отказ

Что, если вы хотите подобрать саму персонаж Asterisk?

Вы знаете, что квантификатор Asterisk соответствует произвольному числу предыдущего регулярного выражения. Но что, если вы ищете сам персонаж звездочки (или звезды)? Как вы можете искать его в строке?

Ответ прост: избегайте символа звездочка в регулярном выражении, используя обратную косание. В частности, используйте '\ *' вместо '*' Отказ Вот пример:

>>> import re
>>> text = 'Python is ***great***'
>>> re.findall('\*', text)
['*', '*', '*', '*', '*', '*']
>>> re.findall('\**', text)
['', '', '', '', '', '', '', '', '', '', '***', '', '', '', '', '', '***', '']
>>> re.findall('\*+', text)
['***', '***']

Вы найдете все вхождения символа Star в тексте, используя Regex '\ *' Отказ Следовательно, если вы используете Regex '\ **' , Вы ищем произвольное количество вхождений символа звездочки (включая нулевые вхождения). И если вы хотите найти все максимальное количество вхождений последующих символов звездочки в тексте, вы бы использовали Regex '\ * +' Отказ

[Коллекция] Каковы различные квантификаторы Python Re?

Asterisk Quantifier-Python Re * – только один из многих операторов Regex. Если вы хотите использовать (и понимать) регулярные выражения на практике, вам нужно знать все их сердцем!

Так что давайте погрузимся в других операторах:

Регулярное выражение – это десятилетие – старая концепция в информатике. Придуманы в 1950-х годах знаменитым математиком Стивеном Коуном Клееем, десятилетия эволюции принесли огромное разнообразие операций. Сбор всех операций и записать всеобъемлющий список приведет к самой толстую и нечитаемой книге самостоятельно.

К счастью, вам не нужно изучать все регулярные выражения, прежде чем вы сможете начать использовать их в ваших практических проектах кода. Далее вы получите быстрый и грязный обзор наиболее важных операций 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 (и большинство других языках). Есть много специальных символов, специально предназначенных для регулярных выражений. Далее мы обнаружим наиболее важные специальные символы.

В чем разница между Python Re * и? Количественные кванты?

Вы можете прочитать Python Re А? квантификатор как нулевое или одно регез : предшествующий регенс А соответствует нулевым временам, либо точно один раз. Но это не совсем не совсем не совсем.

Аналогично, вы можете прочитать Python Re A * Оператор как нулевое или больше регеекс (Я знаю, что это звучит немного неулов): предыдущий регеекс А соответствует произвольному количеству раз.

Вот пример, который показывает разницу:

>>> import re
>>> re.findall('ab?', 'abbbbbbb')
['ab']
>>> re.findall('ab*', 'abbbbbbb')
['abbbbbbb']

Regex 'ab?' соответствует персонажу «А» В строке с последующим персонажем 'b' Если он существует (что он делает в коде).

Regex 'ab *' соответствует персонажу «А» В строке, за которым следует столько персонажей 'b' насколько это возможно.

В чем разница между Python Re * и + квантами?

Вы можете прочитать Python Re A * квантификатор как нулевое или больше регеекс : предшествующий регенс А соответствует произвольному количеству раз.

Аналогично, вы можете прочитать Python Re A + Оператор как по крайней мере, когда регельс : предшествующий регенс А соответствует произвольному количеству раз, но хотя бы один раз.

Вот пример, который показывает разницу:

>>> import re
>>> re.findall('ab*', 'aaaaaaaa')
['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a']
>>> re.findall('ab+', 'aaaaaaaa')
[]

Regex 'ab *' соответствует персонажу «А» В строке, за которым следуют арбитарный номер вхождений характера 'b' Отказ Подстрока «А» Прекрасно соответствует этой формулировке. Поэтому вы обнаружите, что Regeex совпадает с восемь раз в строке.

Regex 'ab +' соответствует персонажу «А» следуют как много персонажей 'b' как можно – но хотя бы один. Тем не менее, персонаж 'b' не существует, так что нет совпадения.

Что такое Python Re *?, +? ?? Количественные кванты?

Вы узнали о трех квантах:

  • Квантификатор A * соответствует произвольному количеству шаблонов А Отказ
  • Квантификатор A + соответствует хотя бы одному шаблону А Отказ
  • Квантификатор А? соответствует шаблону нулевой или один А Отказ

Эти три – все жадный : Они соответствуют максимально возможным вхождении шаблона. Вот пример, который показывает свою жадность:

>>> import re
>>> re.findall('a*', 'aaaaaaa')
['aaaaaaa', '']
>>> re.findall('a+', 'aaaaaaa')
['aaaaaaa']
>>> re.findall('a?', 'aaaaaaa')
['a', 'a', 'a', 'a', 'a', 'a', 'a', '']

Код показывает, что все три кванции * , + и ? соответствовать как много «А» персонажи насколько это возможно.

Итак, логический вопрос: как можно сопоставить как можно меньше? Мы называем это не жадный Соответствие. Вы можете добавить знак вопроса после соответствующих количественных квантов, чтобы сообщить двигателю Regex, который вы намереваетесь максимально соответствовать нескольким шаблонам: *? , +? и ?? Отказ

Вот тот же пример, но с не жадными квантами:

>>> import re
>>> re.findall('a*?', 'aaaaaaa')
['', 'a', '', 'a', '', 'a', '', 'a', '', 'a', '', 'a', '', 'a', '']
>>> re.findall('a+?', 'aaaaaaa')
['a', 'a', 'a', 'a', 'a', 'a', 'a']
>>> re.findall('a??', 'aaaaaaa')
['', 'a', '', 'a', '', 'a', '', 'a', '', 'a', '', 'a', '', 'a', '']

В этом случае код показывает, что все три кванции *? , +? и ?? соответствовать как мало «А» персонажи насколько это возможно.

Связанные методы Re

Есть пять важных методов регулярного выражения, которые вы должны освоить:

  • Re.findall (шаблон, строка) Метод возвращает список строковых совпадений. Читайте больше в Наше руководство в блоге Отказ
  • Re.Search (шаблон, строка) Метод возвращает объект совпадения первого матча. Читайте больше в Наше руководство в блоге Отказ
  • Re.match (шаблон, строка) Метод Возвращает объект совпадения, если установки Regeex в начале строки. Читайте больше в Наше руководство в блоге Отказ
  • Re.fullmatch (шаблон, строка) Метод возвращает объект совпадения, если Regeex соответствует всей строке. Читайте больше в Наше руководство в блоге Отказ
  • Re.compile (Pattern) Способ подготавливает шаблон регулярной экспрессии – и возвращает объект Regex, который вы можете использовать несколько раз в вашем коде. Читайте больше в Наше руководство в блоге Отказ
  • Re.Split (шаблон, строка) Метод возвращает список строк, сопоставив все вхождения шаблона в строке и разделить строку вдоль тех. Читайте больше в Наше руководство в блоге Отказ
  • Re.sub (шаблон, репрекс, строка ,,) Метод возвращает новую строку, в которой все вхождения шаблона в старой строке заменены на Реп Отказ Читайте больше в Наше руководство в блоге Отказ

Эти семь методов составляют 80% от того, что вам нужно знать, чтобы начать работу с функциональностью регулярных выражений Python.

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

Вы узнали все, что вам нужно знать о asterisk Quantifier * В этом руководстве Regex.

Резюме : При применении к регулярному выражению A , Питон A* квантификатор соответствует нулю или более вхождению A Отказ Символ * называется Оператор Звездочки И это относится к предыдущему регулярному выражению. Например, регулярное выражение ‘да*’ Соответствует строки ‘вы’ , ‘да’ , а также «YESSSSSSSS» Но не пустая строка ” .

Хотите заработать деньги, пока вы изучаете Python? Средние программисты Python зарабатывают более 50 долларов в час. Вы, безусловно, можете стать средним, не так ли?

Присоединяйтесь к свободному вебинару, которое показывает, как стать процветающим владельцем бизнеса в Интернете!

[Вебинар] Станьте шестифункциональным внештатным разработчиком с Python

Присоединяйтесь к нам. Это весело! 🙂.

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

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

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