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

Символ Python Re Plus (+) в регулярных выражениях

Эта статья – это символ Plus «+» в библиотеке Python Re. Изучите это внимательно и овладеть этим важным знанием один раз и для всех! Вы также можете посмотреть видео видео, пока вы прочитали объяснения: https://youtu.be/dwjjgvnk1pk Связанная статья: Python Regeex SuperPower – Ultimate Guide Phython Re Plus + … символ Python Re Plus (+) в регулярном Выражения Подробнее »

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

Эта статья все о Плюс символ “+” в Python Re библиотека Отказ Изучите это внимательно и овладеть этим важным знанием один раз и для всех!

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

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

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

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

Скажи, у вас есть какое-либо регулярное выражение A . Регулярное выражение (Regex) A+ затем соответствует одному или нескольким вхождению A . Мы называем символ «+», как минимум-максимум, потому что он требует, по меньшей мере, одно возникновение предыдущего регулятора. Например, регулярное выражение «Да +» соответствует строкам «Да» , «Дамс» и «YESSSSSSS» Отказ Но это не соответствует строке ‘ye’ , ни пустая строка « потому что плюс квантификатор + не распространяется на все Regex «Да» Но только к предшествующему регелесу ‘s’ .

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

>>> import re
>>> re.findall('a+b', 'aaaaaab')
['aaaaaab']
>>> re.findall('ab+', 'aaaaaabb')
['abb']
>>> re.findall('ab+', 'aaaaaabbbbb')
['abbbbb']
>>> re.findall('ab+?', 'aaaaaabbbbb')
['ab']
>>> re.findall('ab+', 'aaaaaa')
[]
>>> re.findall('[a-z]+', 'hello world')
['hello', 'world']

Далее мы объясним эти примеры один за другим.

Примеры

Вы можете проверить ваше понимание в этой интерактивной оболочке Python:

Упражнение : Угадай вывод каждого из тех Распечатать() утверждения и сравните его с фактическим выходом. Сколько вы решили правильно?

Жадные плюс (+) количественные кванты

Вот первый пример:

>>> re.findall('a+b', 'aaaaaab')
['aaaaaab']

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

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

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

Первый аргумент – это шаблон регулярного выражения 'A + B' И второй аргумент – это строка для поиска. На простом английском, вы хотите найти все шаблоны в строке, которая начинается с хотя бы одного, но, возможно, много, символов «А» следуют персонаж 'b' Отказ

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

Второй пример похож:

>>> re.findall('ab+', 'aaaaaabb')
['abb']

Вы ищете персонажа «А» затем хотя бы один персонаж 'b' Отказ Как плюс (+) Quantifier – это жадный , это соответствует столько же 'b' Как это может положить его руки.

Не жадный плюс (+) Квантификаторы

Но что, если вы хотите соответствовать хотя бы одному возникновению регеляции не жадным образом. Другими словами, вы не хотите, чтобы двигатель Regeex потребляет все больше и больше, чем может, но возвращается как можно быстрее, насколько это может от обработки.

Опять же, вот пример жадного матча:

>>> re.findall('ab+', 'aaaaaabbbbb')
['abbbbb']

Двигатель Regex начинается с первого символа «А» и обнаруживает, что это частичный матч. Итак, он движется, чтобы соответствовать второму «А» – что нарушает шаблон 'ab +' Это позволяет только для одного символа «А» Отказ Так что он движется к третьему персонажу, и так далее, пока не достигнет последнего символа «А» В строке 'aaaaaababbbbb' Отказ Это частичное совпадение, поэтому он движется к первому возникновению персонажа 'b' Отказ Это понимает, что 'b' Персонаж может быть сопоставлен частью Regex 'B +' Отказ Таким образом, двигатель начинает соответствовать 'b' s. И это жадно соответствует 'b' S до тех пор, пока он не может соответствовать ни одному персонажу. В этот момент он смотрит на результат и видит, что он нашел соответствующую подстроку, которая является результатом работы.

Тем не менее, он мог остановиться намного раньше, чтобы вызвать не жадный матч после сопоставления первого символа 'b' Отказ Вот пример не жадного квантификатора '+?' (Оба символа вместе образуют одно regex выражение ).

>>> re.findall('ab+?', 'aaaaaabbbbb')
['ab']

Теперь двигатель Regex не жадно «потреблять» столько 'b' персонажи насколько это возможно. Вместо этого он останавливается, как только шаблон соответствует (не жадным).

Передовой

Ради вашего тщательного понимания, давайте посмотрим на другой данный пример:

>>> re.findall('ab+', 'aaaaaa')
[]

Вы можете увидеть, что Quantifier Plus (+) требует, чтобы по меньшей мере одному возникновению предыдущего регеляции совпадают. В примере это персонаж 'b' это не соответствует частично. Итак, результат пустой Список Указывает на то, что совпадающая подстрока не обнаружена.

Другим интересным примером является следующее:

>>> re.findall('[a-z]+', 'hello world')
['hello', 'world']

Вы используете квантов Plus (+) в сочетании с классом символов, который определяет конкретно, какие символы являются действительными совпадениями.

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

Пустое пространство не является частью данного класса символов [A-Z] Так что это не будет совпадать в тексте. Таким образом, результат является список слов, начинающихся с хотя бы одного символа: «Привет» , «Мир» Отказ

Как сопоставить саму символ плюс (+)?

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

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

>>> import re
>>> text = '2 + 2 = 4'
>>> re.findall(' + ', text)
[]
>>> re.findall(' \+ ', text)
[' + ']
>>> re.findall(' \++ ', '2 ++++ 2 = 4')
[' ++++ ']

Если вы хотите найти '+' Символ в вашей строке, вам нужно избежать его, используя обратную косание. Если вы этого не сделаете, двигатель Python Regex будет интерпретировать его как нормальный «по крайней мере – один раз» Regex. Конечно, вы можете объединить сбеженный плюс символ '\ +' С помощью Regex «AT-MIKE – один раз» ищет хотя бы одно вхождению символа плюс.

Python Regex. Более одного пространства

Проблема Как соответствовать более чем одному пространству в регулярном выражении?

Пример : Скажем, вы хотите подобрать следующие шаблоны одного « , два '' и три '' пробелы.

Плюс квантификатор A + соответствует более чем одному вхождению предыдущего шаблона A . Если вы хотите сопоставить более одного пробела, используйте Quantifier Quantifier на WhiteSpace Hareface '+' Отказ Вот практический пример:

import re
text = ' hello  world,   Python!'
print(re.findall(' +', text))

Выходной сигнал является список всех совпадений более одного пространства персонажей:

# [' ', '  ', '   ']

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

Plus 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. Или соответствует либо регезе A или REGEX B. Обратите внимание, что интуиция сильно отличается от стандартной интерпретации или оператора, который также может удовлетворить оба условия. Regex ‘(Hello) | (Привет) «Соответствует строки« Hello World »и« Привет Python ». Было бы не иметь смысла попытаться сопоставить их обоих одновременно.
Аб И совпадает с первым регелем А и второе регулярное выражение в этой последовательности. Мы уже видели его тривиально в Regex ‘Ca’, которое соответствует первым Regex ‘C’ и Second Regex ‘A’.

Обратите внимание, что я дал вышеупомянутые операторы некоторых более значимых имен (жирным шрифтом), чтобы вы могли немедленно понять цель каждого Regex. Например, оператор «^» обычно обозначается как оператор «Caret». Эти имена не описаны Поэтому я придумал более детские сады, такие как оператор «Пусковая строка».

Мы уже видели много примеров, но давайте погрузимся еще больше!

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 a? квантификатор как нулевое или одно регез : Предыдущее Regex a соответствует нулевым временам, либо точно один раз. Но это не совсем не совсем не совсем.

Аналогично, вы можете прочитать оператор Python Re A + как по крайней мере, когда регельс : Предыдущее Regex a соответствует произвольному количеству раз, но, по крайней мере, один раз (как следует наименование).

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

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

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

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

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

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

Аналогично, вы можете прочитать оператор Python Re A + как по крайней мере, когда регельс : Предыдущее Regex 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.
  • Контификатор A + соответствует хотя бы одному рисунку 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', '']

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

Связанные методы 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.

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

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

Резюме : Regex A + соответствует одному или нескольким вхождению Regex A. Символ «+» – это как минимум-максимум, потому что он требует по меньшей мере одного возникновения предыдущего регеляции. Не жадная версия, как минимум-один, как минимум, когда-то квантификатор составляет +? с трейлинговым вопросительным знаком.

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

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

[Вебинар] Вы являетесь личным разработчиком Freelance Six

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

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

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

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

Оригинал: “https://blog.finxter.com/python-re-plus/”