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

Python Re Dot.

Вы собираетесь узнать одно из наиболее часто используемых операторов Regex: Dot Regex. в библиотеке Python Re. Вы также можете посмотреть видео прогулку, когда вы прочитали по учебнику: https://youtu.be/uvytet4PS6w Dot Regex. … Python Re Dot Подробнее »

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

Вы собираетесь узнать одно из наиболее часто используемых операторов Regex: Dot Regex . в Python’s Re библиотека Отказ

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

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

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

Что такое Dot Regex в библиотеке Python Re?

Точка Regex Отказ соответствует всем персонажам, кроме символа Newline. Например, регулярное выражение «...» Соответствует строки «Эй» и «Том» Отказ Но это не соответствует строке 'Йо \ Nto' который содержит новенький символ '\ N' Отказ В сочетании с квантификатором звездочка в шаблоне '. * ' Точка Regex соответствует произвольному количеству символов, кроме новых символов.

Попробуйте сами в нашем интерактивном коде Shell:

Упражнение : Угадай вывод этого кода-фрагмента. Запустите код, чтобы проверить, были ли вы правы! Теперь попробуйте сопоставить еще одно слово, используя точечное регулярное выражение.

Примеры точка Regex.

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

>>> import re
>>> 
>>> text = '''But then I saw no harm, and then I heard
Each syllable that breath made up between them.'''
>>> re.findall('B..', text)
['But']
>>> re.findall('heard.Each', text)
[]
>>> re.findall('heard\nEach', text)
['heard\nEach']
>>> 

Вы сначала импортируете библиотеку Python Re для регулярного обращения с выражением. Затем вы создаете многострочный текст, используя цитаты Triple String.

Давайте погрузимся в первый пример:

>>> re.findall('B..', text)
['But']

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

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

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

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

findall () Метод находит только одно такое происшествие: строка «Но ' Отказ

Второй пример показывает, что оператор DOT не соответствует символу Newline:

>>> re.findall('heard.Each', text)
[]

В этом примере вы смотрите на простой шаблон 'слышал. Каждый ' Отказ Вы хотите найти все вхождения строки «Слышал» сопровождаемый произвольным небетоносным характером, а затем строку «Каждый» Отказ

Но такой узор не существует! Многие кодеры интуитивно читают точечное регулярное выражение как произвольный характер . Вы должны знать, что правильное определение Dot Regex – это произвольный характер, кроме новой строки Отказ Это источник многих ошибок в регулярных выражениях.

Третий пример показывает, как явно соответствовать символу новой строки '\ N' вместо:

>>> re.findall('heard\nEach', text)
['heard\nEach']

Теперь двигатель Regex соответствует подстроке.

Естественно, возникает следующий актуальный вопрос:

Как сопоставить произвольный персонаж (включая новую строку)?

Точка Regex Отказ соответствует одному произвольному характеру, кроме символа Newline. Но что, если вы хотите подобрать новенький персонаж тоже? Есть два основных способа достичь этого.

  • Используйте решающее значение Dotall флаг.
  • Используйте класс символов [.\n] .

Вот конкретный пример, показывающий оба случая:

>>> import re
>>> 
>>> s = '''hello
python'''
>>> re.findall('o.p', s)
[]
>>> re.findall('o.p', s, flags=re.DOTALL)
['o\np']
>>> re.findall('o[.\n]p', s)
['o\np']

Вы создаете многострочную строку. Тогда вы пытаетесь найти рисунок Regex 'o.p' в строке. Но нет совпадения, потому что оператор DOT не соответствует новичкому символу по умолчанию. Однако, если вы определите флаг решающее значение Dotall Новый персонаж также будет действительным матчем.

Узнайте больше о различных флагах в моем руководстве в блоге Finxter.

Альтернатива – использовать чуть более сложный рисунок Regex [.\n] . Квадратные скобки прилагают Класс персонажей – Набор символов, которые являются действительным совпадением. Подумайте о классе персонажа как и или операция: точно один символ должен совпадать.

Как сопоставить точечный персонаж (без особого значения)?

Если вы используете символ '.' В регулярном выражении Питон предполагает, что это точечный оператор, о котором вы говорите. Но что, если вы действительно хотите сопоставить точку, например, чтобы соответствовать периоду в конце предложения?

Ничего проще, чем это: избежать точечного регулятора, используя обратную косание: '\.' Отказ Обратная черта не обнаруживает значение специального символа '.' в Regex. Двигатель Regex теперь знает, что вы на самом деле ищете точечный персонаж, а не произвольный символ, кроме новой строки.

Вот пример:

>>> import re
>>> text = 'Python. Is. Great. Period.'
>>> re.findall('\.', text)
['.', '.', '.', '.']

findall () Метод возвращает все четыре периода в предложении в качестве сопоставления подстроки для Regex '\.' Отказ

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

>>> re.findall('\.\s', text)
['. ', '. ', '. ']

Теперь вы ищете период срока, а затем произвольный пробел. В тексте только три таких соответствующих подстроки.

В следующем примере вы узнаете, как объединить это с классом персонажа:

>>> re.findall('[st]\.', text)
['s.', 't.']

Вы хотите найти либо персонаж 'S' или характер 'T' сопровождается символом периода '.' . Две подстроки соответствуют этому Regex.

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

>>> re.findall('[st].', text)
['th', 's.', 't.']

Как произвольный символ разрешен после класса персонажа, подстрока 'Th' также соответствует Regex.

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

Если вы хотите использовать (и понимать) регулярные выражения на практике, вам нужно знать самые важные квантования, которые могут быть применены к любому Regeex (включая Regex dotex)!

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

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

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

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

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

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

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

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

Резюме : Dot Regex. . соответствует всем персонажам, кроме символа Newline. Например, регулярное выражение ‘…’ Соответствует строки ‘Привет’ а также ‘Том’ . Но это не соответствует строке ‘Йо \ Nto’ который содержит новенький характер ‘\n’ .

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

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

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

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

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

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

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

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