Содержание

примеры Regex и модуль re

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

Чтобы использовать функции регулярных выражений в Python, необходимо импортировать модуль re.

 
import re  

Функции регулярных выражений

В Python используются следующие функции регулярных выражений.

ФункцияОписание
1matchЭтот метод сопоставляет шаблон регулярного выражения в строке с необязательным флагом. Он возвращает истину, если в строке найдено совпадение, в противном случае возвращает ложь.
2searchЭтот метод возвращает объект соответствия, если в строке найдено совпадение. Java»
$Присутствует в конце строки.“point”
*Представляет собой ноль или более вхождений шаблона в строку.“hello*”
+Он представляет собой одно или несколько вхождений шаблона в строку.“hello+”
{}Указанное количество вхождений шаблона в строку.“java{2}”
|Он представляет собой присутствие того или иного символа.“java|point”
()Объединение и группировка.

Особые последовательности

Специальные последовательности – это последовательности, которые содержат (либо за которыми следует) один из символов.

СимволОписание
\AОн возвращает совпадение, если указанные символы присутствуют в начале строки.
\bВозвращает совпадение, если указанные символы присутствуют в начале или в конце строки.
\BОн возвращает совпадение, если символы присутствуют в начале строки, но не в конце.
\dВозвращает совпадение, если строка содержит цифры [0-9].
\DСтрока не содержит цифр [0-9].
\sСтрока содержит какой-либо символ пробела.
\SСтрока не содержит пробелов.
\wСтрока содержит какие-либо символы слова.
\WСтрока не содержит ни одного слова.
\ZВозвращает совпадение, если указанные символы находятся в конце строки.

Наборы

Набор – это группа символов, заключенная в квадратные скобки. Он представляет особый смысл.

НаборОписание
1[arn]Возвращает совпадение, если строка содержит любой из указанных символов в наборе.
2[an]Возвращает совпадение, если строка содержит любой из символов от a до n.
arn]
Строка содержит символы, кроме a, r и n.
4[0123]Строка содержит любую из указанных цифр.
5[0-9]Строка содержит любую цифру от 0 до 9.
6[0-5] [0-9]Строка содержит любую цифру от 00 до 59.
10[a-zA-Z]Возвращает совпадение, если строка содержит буквы алфавита(в нижнем или верхнем регистре).

Функция findall()

Этот метод возвращает список, содержащий все совпадения шаблона в строке. Он возвращает шаблоны в том порядке, в котором они были найдены. Если совпадений нет, возвращается пустой список.

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

 
import re 
 
str = "How are you. How is everything" 
 
matches = re.findall("How", str) 
 
print(matches) 
 
print(matches) 

Выход:

['How', 'How'] 

Объект соответствия

Объект соответствия содержит информацию о поиске и выводе. Если совпадений не найдено, возвращается объект None.

Пример:

 
import re 
 
str = "How are you. How is everything" 
 
matches = re.search("How", str) 
 
print(type(matches)) 
 
print(matches) #matches is the search object 

Выход:

<class '_sre.SRE_Match'> 
<_sre.SRE_Match object; span=(0, 3), match='How'> 

Методы объекта Match

С объектом Match связаны следующие методы.

  1. span(): возвращает кортеж в Python, содержащий начальную и конечную позицию совпадения.
  2. string(): возвращает строку, переданную в функцию.
  3. group(): возвращается часть строки, в которой найдено совпадение.

Пример:

 
import re 
 
str = "How are you. How is everything" 
 
matches = re.search("How", str) 
 
print(matches.span()) 
 
print(matches. group()) 
 
print(matches.string) 

Выход:

(0, 3) 
How 
How are you. How is everything 

Михаил Русаков

Изучаю Python вместе с вами, читаю, собираю и записываю информацию опытных программистов.

Еще для изучения:

Регулярные выражения в Python: основы составления правил

Продолжим говорить о регулярных выражениях в Python в рамках NLP. Регулярные выражения нужны для поиска подстрок, которые удовлетворяют правилам. Например, нужно найти все слова, которые начинаются с заглавной буквы «А», или все даты в предложении, которое содержит и другие виды чисел. Сегодня мы расскажем об основных символах, которые образуют регулярные выражения: замена, группировка, перечисление символов, а также специальные символы в Python.

Один любой символ или повторять до бесконечности

Когда появляется ситуация, когда мы не знаем какой именно символ используется, то используется точка

. . А когда нужно повторить какой символ сколько-то раз, то используется звездочка * (0 или n символов) или плюс + (1 или n символов). Рассмотрите примеры регулярных выражений в Python:

# aa.bb. # Может значить aapbby или aa4bb$
# a.b* # Может значить acbbb или aqb или a,bbbbbb
>>> import re
>>> re.search('aa.bb.', 'aapbby')
<re.Match object; span=(0, 6), match='aapbby'>
>>> re.search('a.b*', 'a,bbbbbb')
<re.Match object; span=(0, 8), match='a,bbbbbb'>

Точка и звездочка могут использоваться вместе .*, тогда это значит любой символ повторяется сколько-то раз. Это удобно, когда вы не помните все выражение, но знаете каким символом он заканчивается. Ниже пример того, как применять такое регулярное выражение в Python.

>>> re.search('<h.*>', '<html>')
<re.Match object; span=(0, 6), match='<html>'>

Но стоит быть очень осторожным с ним, поскольку это регулярное выражение будет смотреть совпадения до конца строки.

А это бывает не то, что нужно:

# Вместо <html> совпала вся строка, потому что она оканичается на символ '>'
>>> re.search('<h.*>', '<html>..<li>...</li>')
<re.Match object; span=(0, 20), match='<html>..<li>...</li>'>
Группа символов

Символы могут быть сгруппированы с помощью круглых скобок. К этим группам могут быть применены повторения * или +. Кроме того внутри скобок может использоваться оператор ИЛИ в виде |. Следующие примеры показывают разные регулярные выражения в Python с применением группировок:

# (ac)* # соответсвует acacac или acac # Знак | соответсвует ИЛИ: >>> re.search('d(e|i)n', 'den') <re.Match object; span=(0, 3), match='den'> >>> re.search('d(e|i)n', 'din') <re.Match object; span=(0, 3), match='din'>
Перечисление символов

Как мы увидели, использовать . * опасно. Поэтому лучше всего перечислять всевозможные символы внутри квадратных скобок []. Например, не известно какой знак препинания следует дальше, тогда в Python можно регулярное выражение вывести следующим образом:

>>> pattern = 'a[,u]bc'
>>> re.search(pattern, 'a,bc')
<re.Match object; span=(0, 4), match='a,bc'>
>>> re.search(pattern, 'aubc')
<re.Match object; span=(0, 4), match='aubc'>
>>> re.search(pattern, 'adbc') # Ничего не нашел

Последний пример не соответствует правилу, потому что символ 'd' не указан в []. Также в квадратных скобках можно указывать диапазоны букв и цифры. Например, [a-z] означает все строчные буквы английского алфавита, [A-Z] — все прописные, а [0-9] — все цифры. Ниже приведены примеры регулярных выражения с применением диапазонов на Python.

>>> re. 0-9] — любой символ не цифра. Диапазоны кириллических символов задаются в виде [А-Яа-я].

Обратный слэш для пропуска символов

Как в квадратных скобках для регулярного выражения указать знак препинания точку? Ведь точка является специальным правилом, которое обозначает «любой символ». Для таких случаев используется обратный слэш \. При использовании перед специальными символами Python интерпретирует их как обычные символы. Поэтому чтобы пропустить также сами квадратные скобки, то и перед ними тоже нужно его поставить. Ниже показаны примеры регулярных выражения с использованием обратного слэша на Python.

>>> pattern = 'a[,\.\]]bc' # Это , или . или ]
>>> re.search(pattern, r'a]bc')
<re.Match object; span=(0, 4), match='a]bc'>
 >>> re.search(pattern, r'a.bc')
<re.Match object; span=(0, 4), match='a.bc'>

В строке обратный слэш тоже имеет особое значение. Он ответственен за специальные символы: \n (новая строка), \t (отступ), \s (пробел) и т.д. Их так же можно перечислять в квадратных скобках. А вот для пропуска самого обратного слэша в Python, требуется повторить его 4 раза. Ведь два слэша значат слэш как обычный символ, а чтобы пропустить его нужно два обычных. Иными словами, это:

>>> re.search('\\\\', 'ab\cd')
<re.Match object; span=(2, 3), match='\\'>

интерпретируется как это:

regex("\\" [пропущенный слэш] пропускает "\\" [пропущенный слэш])

В Python строку можно инициализировать как raw (сырую), т.е. в ней обратный слэш будет считаться как обычный символ. Для этого перед строкой указывается r. Взгляните как прописываются пути Windows в Python в виде обычной и сырой строки:

>>> 'C:\User\admin\python'
  File "<stdin>", line 1
    'C:\User\admin\python'
SyntaxError: (unicode error) 'unicodeescape' codec can t decode bytes in position 2-3: truncated \UXXXXXXXX escape
SyntaxError: invalid syntax
# Ошибка, потому что Python не понимает \U
# Чтобы прописать путь, используется \\ или r:
>>> path = 'C:\\User\\admin\\python'
>>> raw_path = r'C:\\User\\admin\\python'
Цифры, пробелы, отступы

Использование обратного слэша вместе с некоторыми символами даст новое значение строке. a-zA-Z0-9_]

>>> re.search('\d\d\d\d-\d\d-\d\d', '2020-05-10')
<re.Match object; span=(0, 10), match='2020-05-10'>

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

СимволЗначениеПримерСовпадения
.Любой одиночный символ (включая числа, пробелы и т. д.).f.tfat, fit, fet
*Повторение 0 или более разa*b*aabbb, bbb, ab, aaa
+Повторение 1 или более разa+b+aabbb, ab, aaabbb
[]Выбор любого символа в скобках[a-z]*apes, banana, flu
[^]Любой символ, которого нет в скобках[^a-z]*APES,FLU, BANANA
()Группа символов(a*b)*aaabaab, abaaab, bab
|Оператор ИЛИ внутри группы символовb(a|i|e)dbad, bid, bed
\Знак пропуска\. aapple, asdf, a
$Сканировать до конца строки[A-Z]*[a-z]*$ABCabc, zzzyx, Bob

 

О том, как применять регулярные выражения в Python для решения реальных Data Science задач, вы узнаете на нашем специализированном курсе «PNLP: NLP – обработка естественного языка с Python» в лицензированном учебном центре обучения и повышения квалификации Data Scientist’ов и IT-специалистов в Москве.

Смотреть расписание

Записаться на курс

Источники

  1. https://docs.python.org/3/howto/regex.html

Учебник по регулярным выражениям Python | Учебник по Python Regex

Важность регулярных выражений

За последние несколько лет произошел резкий сдвиг в использовании языков программирования общего назначения для науки о данных и машинного обучения. Так было не всегда — десять лет назад эта мысль встретила бы множество скептических взглядов!

Это означает, что все больше людей/организаций используют такие инструменты, как Python/JavaScript, для решения своих потребностей в данных. Именно здесь регулярные выражения становятся очень полезными. Регулярные выражения обычно являются способом очистки и обработки данных по умолчанию в большинстве этих инструментов. Будь то извлечение определенных частей текста с веб-страниц, анализ данных Twitter или подготовка ваших данных для анализа текста — регулярные выражения — ваш лучший выбор для всех этих задач.

Учитывая их применимость, имеет смысл знать их и использовать надлежащим образом.

 

Что вы узнаете из этой статьи?

В этой статье я расскажу вам об использовании, примерах и применении регулярных выражений. Регулярные выражения очень популярны среди программистов и могут применяться во многих языках программирования, таких как Java, JS, php, C++ и т. д. Для лучшего понимания мы объяснили эту концепцию с помощью языка программирования Python. Ближе к концу я решил различные проблемы, используя регулярные выражения.

Начнем!

 

Что такое регулярное выражение и как оно используется?

Проще говоря, регулярное выражение — это последовательность символов, которая в основном используется для поиска и замены шаблонов в строке или файле. Как я упоминал ранее, они поддерживаются большинством языков программирования, таких как python, perl, R, Java и многими другими. Таким образом, их изучение помогает во многих отношениях (подробнее об этом позже).

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

а) Метасимволы: Как следует из названия, эти символы имеют особое значение, аналогичное * в подстановочном знаке.

b) Литералы (например, a,b,1,2…)

В Python у нас есть модуль « re », который помогает с регулярными выражениями. Поэтому вам нужно импортировать библиотеку вместо , прежде чем вы сможете использовать регулярные выражения в Python.

 Используйте этот код --> Импортировать повторно 

Наиболее часто регулярные выражения используются:

  • Поиск строки (поиск и сопоставление)
  • Поиск строки (findall)
  • Разбить строку на подстроки (разделить)
  • Заменить часть строки (sub)

Давайте посмотрим на методы, которые библиотека « re » предоставляет для выполнения этих задач.

Примечание: У нас также есть видеокурс по обработке естественного языка, в котором также рассматриваются регулярные выражения. Проверьте это!

Каковы различные методы регулярных выражений?

Пакет re предоставляет несколько методов для выполнения запросов к входной строке. Вот наиболее часто используемые методы, о которых я расскажу:

  1. повторный матч()
  2. поиск()
  3. re.findall()
  4. re.split()
  5. re.sub()
  6. перекомпилировать ()

Давайте рассмотрим их один за другим.

 

re.match(

шаблон , строка ):

Этот метод находит совпадение, если оно встречается в начале строки. Например, вызов match() для строки «AV Analytics AV» и поиск шаблона «AV» будут соответствовать. Однако, если мы ищем только Google Analytics, шаблон не будет совпадать. Давайте сейчас выполним это на python.

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

 

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

 

re.search(

шаблон , строка ):

Похож на match(), но не ограничивает нас поиском совпадений только в начале строки. В отличие от предыдущего метода, здесь поиск шаблона «Аналитика» вернет совпадение.

Код

 результат = re.search(r'Analytics', 'AV Analytics Vidhya AV')
распечатать результат.группа(0)
  Выход: 
Аналитика 

Здесь вы можете видеть, что метод search() может найти шаблон из любой позиции строки, но он возвращает только первое вхождение шаблона поиска.

 

re.findall (

шаблон , строка ):

It   помогает получить список всех совпадающих шаблонов. Он не имеет ограничений поиска с начала или конца. Если мы будем использовать метод findall для поиска «AV» в заданной строке, он вернет оба вхождения AV. При поиске строки я бы рекомендовал вам использовать re.findall() всегда, может работать как re.search(), так и re.match().

Код

 результат = re.findall(r'AV', 'AV Analytics Vidhya AV')
распечатать результат

  Выход: 
['АВ', 'АВ']

 

 

re.split(

шаблон , строка , [ maxsplit=0 ]):

Этот метод помогает разбить строку на вхождения данного шаблона .

Код

 результат=re.split(r'y','Аналитика')
результат

  Выход: 
['Анал', 'тики']

 

Выше мы разделили строку «Аналитика» на «y». Метод split() имеет еще один аргумент « maxsplit ». По умолчанию имеет нулевое значение. В этом случае выполняется максимально возможное разбиение, но если мы присвоим значение maxsplit, строка будет разделена. Давайте посмотрим на пример ниже:

Код

 result=re.split(r'i','Аналитика Видья')
распечатать результат

  Выход  :
['Analyt', 'cs V', 'dhya'] # Он выполнил все шпагаты, которые можно сделать по схеме "i".

Код

result=re.split(r'i','Analytics Vidhya',maxsplit=1)
результат

  Выход  :
['Аналит', 'CS Vidhya']

 

Здесь вы можете заметить, что мы установили maxsplit на 1. В результате у него только два значения, тогда как в первом примере их три.

 

re.sub(

шаблон , repl , строка ):

Помогает найти шаблон и заменить новой подстрокой. Если шаблон не найден, строка возвращается без изменений.

Код

 result=re.sub(r'Индия','Мир','AV — крупнейшее аналитическое сообщество Индии')
результат
  Выход:
  «AV — крупнейшее аналитическое сообщество в мире»

 

 

re.compile(

шаблон , repl , строка ):

Мы можем объединить шаблон регулярного выражения в объекты шаблона, которые можно использовать для сопоставления шаблонов. Это также помогает повторно искать шаблон, не переписывая его.

Код

 импорт повторно
шаблон = перекомпилировать ('AV')
result=pattern.findall('AV Analytics Vidhya AV')
распечатать результат
result2=pattern.findall('AV — крупнейшее аналитическое сообщество Индии')
распечатать результат2
  Выход:
  ['АВ', 'АВ']
['СРЕДНИЙ']

 

 

Краткий обзор различных методов:

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

Эту проблему легко решить, определив выражение с помощью операторов шаблонов (мета- и литеральные символы). Давайте рассмотрим наиболее распространенные операторы шаблонов.

 

Какие операторы используются чаще всего?

Регулярные выражения могут указывать шаблоны, а не только фиксированные символы. Вот наиболее часто используемые операторы, которые помогают создать выражение для представления необходимых символов в строке или файле. Он обычно используется при удалении веб-страниц и анализе текста для извлечения необходимой информации.

Операторы Описание
.  Соответствует любому одиночному символу, кроме символа новой строки «\n».
? соответствует 0 или 1 вхождению шаблона слева от него
+  1 или более вхождений шаблона слева от него
*  0 или более вхождений шаблона слева от него
 Соответствует буквенно-цифровому символу, тогда как \W (W в верхнем регистре) соответствует не буквенно-цифровому символу.
  Соответствует цифрам [0–9], а /D (D в верхнем регистре) соответствует нецифрам.
 Соответствует одному пробельному символу (пробел, новая строка, возврат, табуляция, форма), а \S (S в верхнем регистре) соответствует любому непробельному символу. ..] соответствует любому одиночному символу, не заключенному в квадратную скобку 9и $ соответствуют началу или концу строки соответственно
{н,м}  Соответствует не менее n и не более m вхождений предшествующего выражения. Если мы запишем его как {,m}, то будет возвращено как минимум любое минимальное вхождение для max m предшествующего выражения.
а| б  Соответствует a или b
( ) Группирует регулярные выражения и возвращает соответствующий текст
\t, \n, \r  Вкладка "Совпадения", новая строка, возврат

Подробнее о метасимволах «(«, «)»,»,|» и другие подробности , вы можете перейти по этой ссылке (https://docs.python.org/2/library/re.html).

Теперь давайте разберемся с операторами шаблонов, рассмотрев приведенные ниже примеры.

 

Некоторые примеры регулярных выражений

 

Проблема 1: вернуть первое слово заданной строки

Решение-1   Извлечь каждый символ ( , используя « \w " )

Код

 импорт повторно
result=re. findall(r'.','AV — крупнейшее аналитическое сообщество Индии')
распечатать результат

  Выход: 
['A', 'V', ' ', 'i', 's', ' ', 'l', 'a', 'r', 'g', 'e', ​​'s', 't' , ' ', 'А', 'н', 'а', 'л', 'у', 'т', 'и', 'с', 'с', ' ', 'с', 'о' , 'м', 'м', 'у', 'н', 'и', 'т', 'у', ' ', 'о', 'ф', ' ', 'я', 'н' , 'д', 'и', 'а'] 

Выше также извлекается пробел, теперь, чтобы его избежать, используйте « \w » вместо «9».0033 . ».

 

Код

 result=re.findall(r'\w','AV – крупнейшее аналитическое сообщество Индии')
распечатать результат

  Выход: 
['A', 'V', 'i', 's', 'l', 'a', 'r', 'g', 'e', ​​'s', 't', 'A', ' н', 'а', 'л', 'у', 'т', 'и', 'с', 'с', 'с', 'о', 'м', 'м', 'у' , 'n', 'i', 't', 'y', 'o', 'f', 'I', 'n', 'd', 'i', 'a'] 

 

Решение-2   Извлечь каждое слово  ( , используя « * » или « + » )

Код

 result=re. findall(r'\w*','AV — крупнейшее аналитическое сообщество Индии')
распечатать результат

  Выход: 
['AV', '', 'есть', '', 'крупнейший', '', 'Аналитика', '', 'сообщество', '', 'из', '', 'Индия', ''] 

 

Опять же, он возвращает пробел как слово, потому что « * » возвращает ноль или более совпадений шаблона слева от него. Теперь, чтобы удалить пробелы, мы пойдем с « + ».

Код

 result=re.findall(r'\w+','AV — крупнейшее сообщество аналитиков в Индии')
распечатать результат
 9», он вернет слово с конца строки. Давайте посмотрим на это. 

Код

 result=re.findall(r'\w+$','AV — крупнейшее сообщество аналитиков в Индии')
результат печати 
  Вывод:  
['Индия']

 

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

Решение-1   Извлечь два последовательных символа из каждого слова, исключая пробелы (используя « \w » )

Код

 result=re. findall(r'\w\w','AV — крупнейшее аналитическое сообщество Индии')
распечатать результат

Выход:
['AV', 'is', 'la', 'rg', 'es', 'An', 'al', 'yt', 'ic', 'co', 'mm', 'un', ' это', 'из', 'в', 'ди'] 

Решение-2   Извлечь два последовательных символа, доступных в начале границы слова (используя " \b " )

 result=re.findall(r'\b\w.','AV — крупнейшее аналитическое сообщество Индии')
распечатать результат

  Выход: 
['AV', 'is', 'la', 'An', 'co', 'of', 'In']

 

Проблема 3: вернуть тип домена для заданных идентификаторов электронной почты

Чтобы объяснить это просто, я снова воспользуюсь поэтапным подходом:

Решение-1   Извлечь все символы после «@»

Код

 result=re.findall(r'@\w+','[электронная почта защищена], [электронная почта защищена], [электронная почта защищена], [электронная почта защищена]')
распечатать результат
  Вывод:  ['@gmail', '@test', '@analyticsvidhya', '@rest'] 

Выше видно, что часть «. com», «.in» не извлекается. Чтобы добавить его, мы пойдем с приведенным ниже кодом.

 result=re.findall(r'@\w+.\w+','[электронная почта защищена], [электронная почта защищена], [электронная почта защищена], [электронная почта защищена]')
распечатать результат
  Выход: 
['@gmail.com', '@test.in', '@analyticsvidhya.com', '@rest.biz']

 

Решение — 2 Извлечь только доменное имя, используя «( )»

Код

 result=re.findall(r'@\w+.(\w+)','[электронная почта защищена], [электронная почта защищена], [электронная почта защищена], [электронная почта защищена]')
распечатать результат 
  Вывод: 
['ком', 'в', 'ком', 'биз'] 

Проблема 4: дата возврата из заданной строки

Здесь мы будем использовать « \d » для извлечения цифры.

Решение:

Код

 result=re.findall(r'\d{2}-\d{2}-\d{4}','Амит 34-3456 12-05-2007, XYZ 56-4532 11-11-2011, ABC 67-8945 01. 12.2009')
распечатать результат
  Выход: 
['05.12.2007', '11.11.2011', '01.12.2009']

 

Если вы хотите снова извлечь только год, вам поможет скобка «()».

Код

результат=re.findall(r'\d{2}-\d{2}-(\d{4})','Амит 34-3456 12-05-2007, XYZ 56-4532 11-11-2011, АВС 67-8945 01.12.2009')
распечатать результат
  Выход: 
['2007', '2011', '2009']

 

Задача 5. Вернуть все слова строки, начинающиеся с гласной

.

Решение-1   Вернуть каждое слово

Код

 result=re.findall(r'\w+','AV — крупнейшее сообщество аналитиков в Индии')
распечатать результат

  Выход:
  ['AV', 'есть', 'крупнейший', 'Аналитика', 'сообщество', 'из', 'Индия']

 

Решение-2   Возвращаемые слова начинаются с букв (используя [])

Код

 result=re.findall(r'[aeiouAEIOU]\w+','AV — крупнейшее сообщество аналитиков в Индии')
распечатать результат

  Выход:
  ['AV', 'is', 'argest', 'Analytics', 'сообщество', 'из', 'Индия'] 

Выше вы можете видеть, что он вернул «argest» и «ommunity» из середины слов. Чтобы удалить эти два, нам нужно использовать «\b» для границы слова. 9aeiouAEIOU ]\w+','AV — крупнейшее сообщество аналитиков в Индии') распечатать результат Выход: ['крупнейший', 'сообщество']

Проблема 6. Проверка номера телефона (номер телефона должен состоять из 10 цифр и начинаться с 8 или 9)

 

У нас есть список телефонных номеров в списке «li», и здесь мы будем проверять телефонные номера, используя обычный

Раствор

Код

 импорт повторно
li=['9999999999','999999-999','99999x9999']
для val в ли:
 если re.match(r'[8-9]{1}[0-9]{9}',val) и len(val) == 10:
     напечатать «да»
 еще:
     печатать «нет» 
  Выход:
  да
нет
№ 

Проблема 7. Разделение строки с несколькими разделителями

Раствор

Код

 импорт повторно
line = 'asdf fjdk;afed,fjek,asdf,foo' # Строка имеет несколько разделителей (";",","," "). 
результат= re.split(r'[;,\s]', строка)
распечатать результат

  Вывод: 
['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo'] 

Мы также можем использовать метод re.sub()  , чтобы заменить эти несколько разделителей одним пробелом " ".

Код

 импорт повторно
строка = 'asdf fjdk;afed,fjek,asdf,foo'
результат= re.sub(r'[;,\s]',' ', строка)
распечатать результат

  Выход: 
asdf fjdk afed fjek asdf foo 

Проблема 8: получение информации из HTML-файла

Я хочу извлечь информацию из файла HTML (см. ниже примеры данных). Здесь нам нужно извлечь информацию, доступную между и, кроме первого числового индекса. Я предположил здесь, что приведенный ниже html-код хранится в строке стр .

Образец файла HTML (str)

 1 Ной Эмма
2 Лиам Оливия
3 Мейсон София
4 Джейкоб Изабелла
5 Уильям Ава
6 Итан Миа
7 Майкл Эмили 

Решение:

Код

 result=re. findall(r'\w+\s(\w+)\s(\w+)',str)
распечатать результат
  Выход: 
[('Ной', 'Эмма'), ('Лиам', 'Оливия'), ('Мейсон', 'София'), ('Джейкоб', 'Изабелла'), ('Уильям', 'Ава') , ('Итан', 'Миа'), ('Майкл', 'Эмили')] 

Вы можете прочитать html-файл, используя библиотеку urllib2 (см. код ниже).

Код

 импорт urllib2
ответ = urllib2.urlopen('')
html = ответ.читать() 

Конец Примечания

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

Статья была вам полезна? Дайте нам знать ваши мысли об этом руководстве в разделе комментариев ниже.

Если вам нравится то, что вы только что прочитали, и вы хотите продолжить изучение аналитики, подпишитесь на наши электронные письма, следите за нами в Твиттере или лайкните нашу страницу в Facebook.

live codingmeta charatersОбработка естественного языкаОператоры шаблонов NLPpythonRegExРегулярное выражениеРегулярное выражение в pythontext miningвеб-скрапинг

Регулярное выражение в Python — PYnative

В этом руководстве описывается использование регулярных выражений в Python. В этом уроке мы объясним, как использовать модуль Python RE для сопоставления шаблонов с регулярными выражениями.

Регулярное выражение Python — это сокращение от регулярного выражения Python. Этот учебник по регулярным выражениям начинается с основ и постепенно охватывает более сложные техники и методы регулярных выражений.

В этом руководстве рассматриваются следующие компоненты:

  • Модуль Python RE
  • Регулярные выражения и их синтаксис
  • Методы и объекты регулярных выражений
  • Метасимволы регулярных выражений, специальные последовательности и классы символов
  • Флаги параметров регулярных выражений
  • Группы захвата
  • Нотации расширения и утверждения
  • Реальный пример регулярного выражения

Серия RegEx

Эта серия Python Regex содержит следующее подробное руководство . Вы можете напрямую прочитать их.

  • Компиляция регулярных выражений Python : компилирует шаблон регулярного выражения, представленный в виде строки, в объект re.Pattern .
  • Соответствие регулярному выражению Python : подробное руководство по сопоставлению с образцом.
  • Поиск регулярного выражения Python : поиск первых вхождений шаблона регулярного выражения внутри целевой строки.
  • Регулярное выражение Python находит все совпадения : Сканирует шаблон регулярного выражения по всей строке и возвращает все совпадения.
  • Разделение регулярного выражения Python : Разделить строку на список совпадений в соответствии с заданным шаблоном регулярного выражения.
  • Python Regex replace : заменить одно или несколько вхождений шаблона в строке заменой.
  • Группы захвата регулярных выражений Python : Сопоставление нескольких различных шаблонов внутри одной и той же целевой строки.
  • Метасимволы и операторы регулярных выражений Python : Метасимволы — это специальные символы, влияющие на интерпретацию окружающих их регулярных выражений.
  • Специальные последовательности регулярных выражений Python и классы символов : специальная последовательность представляет основные предопределенные классы символов.
  • Флаги регулярных выражений Python : Все методы модуля RE принимают необязательный аргумент флагов, используемый для включения различных уникальных функций и вариантов синтаксиса.
  • Регулярные выражения Python span(), start() и end() : для поиска совпадающих позиций.

Что такое регулярные выражения?

Регулярное выражение или регулярное выражение — это способ определения шаблона для поиска или управления строками. Мы можем использовать регулярное выражение для сопоставления, поиска, замены и манипулирования внутри текстовых данных.

Проще говоря, шаблон регулярного выражения Jessa будет соответствовать имени Jessa.

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

Кроме того, регулярные выражения помогают извлекать информацию из текста, такого как файлы журналов, электронные таблицы или даже текстовые документы.

Например, ниже приведены некоторые случаи, когда регулярные выражения могут помочь вам сэкономить много времени.

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

Модуль re

Мы начнем это руководство с модуля RE, встроенного модуля Python, который предоставляет все необходимые функции, необходимые для обработки шаблонов и регулярных выражений.

Тип импорт в начале вашего файла Python, и вы готовы использовать методы модуля re и специальные символы. Чтобы ознакомиться с функциями, методами и атрибутами модуля RE, используйте функцию help .

Просто передайте имя модуля в качестве аргумента функции справки, например print(help(re)) . Он покажет сотни строк просто потому, что этот модуль обширен и всеобъемлющ.

Теперь давайте посмотрим, как использовать модуль re для сопоставления шаблонов регулярных выражений в Python.

Пример 1: Напишите регулярное выражение для поиска цифры внутри строки

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

В этом примере мы будем использовать метасимвол ( \d  ). Мы подробно обсудим метасимволы регулярных выражений в следующем разделе этой статьи.

На данный момент имейте в виду, что \d   — это специальная последовательность, которая соответствует любой цифре от 0 до 9..

 # импорт модуля RE
импортировать повторно

target_str = "Мой бросок номер 25"
res = re.findall(r"\d", target_str)
# извлечь математическое значение
печать (разрешение)
# Output [2, 5] 

Понять этот пример

  1. Мы импортировали модуль RE в нашу программу
  2. Затем мы создали шаблон регулярного выражения \d для соответствия любой цифре от 0 до 9.
  3. После этого мы использовали метод re.findall() для сопоставления с нашим шаблоном.
  4. В итоге мы получили две цифры 2 и 5.

Использовать необработанную строку для определения регулярного выражения

Примечание : Я использовал необработанную строку для определения шаблона, подобного этому r"\d" . Всегда пишите регулярное выражение в виде необработанной строки.

Как вы, возможно, уже знаете, обратная косая черта в некоторых случаях имеет особое значение , потому что она может указывать на escape-символ или escape-последовательность. Чтобы избежать этого, всегда используйте необработанную строку.

Например, предположим, что в Python мы определяем строку, которая на самом деле является путем к папке упражнений, подобной этой 9c:\\пример\\задача\\новая" # \n и \t имеют особое значение в Python # Python будет относиться к ним по-разному res = re.search (шаблон, целевая_строка) print(res.group())

Обратите внимание, что внутри шаблона есть два escape-символа \t и \n . Если вы выполните приведенный выше код, вы получите ошибку re.error: bad escape , потому что \n и \t имеют особое значение в Python.

Чтобы избежать таких проблем, всегда пишите шаблон регулярного выражения, используя необработанную строку. 9c:\\example\\task\\new» и снова выполните наш код. Теперь вы можете получить следующий вывод.

 с необработанной строкой:
Соответствующий путь: ['c:\\example\\task\\new'] 

Методы регулярных выражений Python

Модуль регулярных выражений Python состоит из нескольких методов. ниже приведен список методов регулярных выражений и их значение.

Нажмите на название каждого метода, чтобы изучить его подробно .

Метод Описание
перекомпилировать('шаблон') Скомпилируйте шаблон регулярного выражения, представленный в виде строки, в объект re.Pattern .
н.иск(выкройка,стр) Поиск вхождений шаблона регулярного выражения внутри целевой строки и возврат только первого совпадения.
ре.матч(шаблон,стр) Попробуйте сопоставить шаблон регулярного выражения в начале строки. Он возвращает совпадение только в том случае, если шаблон находится в начале строки.
re.fullmatch(шаблон, стр) Сопоставьте шаблон регулярного выражения со всей строкой от первого до последнего символа.
ре.финдалл(узор, стр) Сканирует шаблон регулярного выражения по всей строке и возвращает все совпадения.
ре.финдитер(выкройка,стр) Сканирует шаблон регулярного выражения по всей строке и возвращает итератор, возвращающий объекты соответствия.
ре.сплит(узор,стр) Разбивает строку на список совпадений в соответствии с заданным шаблоном регулярного выражения.
re.sub(шаблон, замена, стр) Заменить одно или несколько вхождений шаблона в строке заменой .
р.подп(шаблон, замена, стр) То же, что и re. sub(). Разница в том, что он вернет кортеж из двух элементов.
Во-первых, новая строка после всех замен, а во-вторых, количество произведенных замен.
Методы регулярных выражений Python

Пример 2. Как использовать регулярные выражения в Python

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

 # импорт модуля RE
импортировать повторно

target_string = "Зарплата Джессы 8000$"

# скомпилировать шаблон регулярного выражения
# шаблон для соответствия любому символу
str_pattern = г"\ш"
шаблон = перекомпилировать (str_pattern)

# соответствие шаблону регулярного выражения в начале строки
res = шаблон.match(целевая_строка)
# соответствующий символ
печать (рез.группа())
# Вывод 'J'

# поиск шаблона регулярного выражения в любом месте внутри строки
# шаблон для поиска любой цифры
res = re.search(r"\d", target_string)
печать (рез.группа())
# Выход 8

# шаблон для поиска всех цифр
res = re.findall(r"\d", target_string)
печать (разрешение)
# Вывод ['8', '0', '0', '0']

# регулярное выражение для разделения строки на пробелы
res = re. split(r"\s", target_string)
print("Все токены:", рез)
# Вывод ['Джесса', 'зарплата', 'есть', '8000$']

# регулярное выражение для замены
# заменить пробел дефисом
res = re.sub(r"\s", "-", target_string)
# строка после замены:
печать (разрешение)
# Выходные данные Jessa-salary-is-8000$ 

Методы объекта Match

Кроме того, всякий раз, когда мы находим совпадение с шаблоном регулярного выражения, Python возвращает нам объект Match. Позже мы можем использовать следующие методы объекта re.Match для извлечения совпадающих значений и позиций.

Метод Значение
группа() Вернуть строку, соответствующую шаблону регулярного выражения. См. группы захвата.
группы() Возвращает кортеж, содержащий строки для всех совпадающих подгрупп.
начало() Вернуть начальную позицию матча.
конец() Вернуть конечную позицию совпадения.
размах() Возвращает кортеж, содержащий (начальную и конечную) позиции совпадения.
Регулярное выражение Python Соответствие методам объекта

Метасимволы регулярного выражения

В регулярном выражении можно использовать как специальные, так и обычные символы. Например, большинство обычных символов, таких как «A», «p», являются простейшими регулярными выражениями; они соответствуют себе. Вы можете объединять обычные символы, поэтому шаблон PYnative соответствует строке «PYnative».

Помимо этого у нас также есть специальные символы. Например, такие символы, как «|», «+» или «*», являются специальными. Специальные метасимволы не совпадают сами с собой. Вместо этого они указывают на некоторые правила. Специальные символы влияют на интерпретацию окружающих их регулярных выражений. 9 (Каре) Соответствует шаблону только в начале строки.
См. пример $ (Доллар) Соответствует образцу в конце строки.
См. пример * (звездочка) Соответствует 0 или более повторениям регулярного выражения.
См. пример + (плюс) Соответствует 1 или более повторениям регулярного выражения.
См. пример ? (Вопросительный знак) Совпадение с 0 или 1 повторением регулярного выражения.
См. пример [] (Квадратные скобки) Используется для обозначения набора символов. Соответствует любому одиночному символу в скобках. Например, [abc] будет соответствовать символу a, b или c.
См. пример | (труба) используется для указания нескольких шаблонов. Например, P1|P2 , где P1 и 9…] Соответствует любому одиночному символу, не указанному в квадратных скобках. (...) Соответствует любому регулярному выражению в скобках. Например, (abc) будет соответствовать подстроке 'abc' . Метасимволы регулярных выражений Python

Специальные последовательности регулярных выражений (также известные как классы символов)

Специальные последовательности состоят из '\' и символа из списка ниже. Каждая специальная последовательность имеет уникальное значение.

Следующие специальные последовательности имеют предопределенное значение и делают определенные общие шаблоны более удобными в использовании. Например, вы можете использовать \d как упрощенное определение для [0..9] или \w как более простую версию [a-zA-z] .

Подробнее о Руководство по специальным последовательностям регулярных выражений

Нажмите на каждую специальную последовательность , чтобы изучить ее подробно.

Специальная серия Значение
Соответствует шаблону только в начале строки.
См. пример
Соответствует шаблону только в конце строки.
Соответствует любой цифре. Сокращенное обозначение классов символов [0–9] .
См. пример
Соответствует любой нецифре. сокращение от 9a-zA-Z_0-9]
Соответствует пустой строке, но только в начале или в конце слова. Соответствует границе слова, где символ слова равен [a-zA-Z0-9_] .
Например, « \bJessa\b" соответствует «Jessa», «Jessa.», «(Jessa)», «Jessa Emma Kelly», но не «JessaKelly» или «Jessa5».
См. пример
Напротив \b . Соответствует пустой строке, но только если она не находится в начале или в конце слова
Специальные последовательности регулярных выражений Python

Квантификаторы регулярных выражений

Мы используем квантификаторы для определения количества. Квантификатор — это метасимвол, который определяет, как часто может встречаться предыдущее регулярное выражение. вы можете использовать его, чтобы указать, сколько раз регулярное выражение может повторяться/возникать.

Например, мы используем метасимвол * , + , ? и {} для определения квантификаторов.

Посмотрим список квантификаторов и их значение.

Квантификатор Значение
* Совпадение с 0 или более повторениями предыдущего регулярного выражения. Например, a* соответствует любой строке, содержащей ноль или более вхождений ‘a’.
+ Совпадение с 1 или более повторениями предыдущего регулярного выражения. Например, а+ соответствует любой строке, которая содержит хотя бы одну а, т. е. а, аа, ааа или любое количество а.
? Совпадение с 0 или 1 повторением предыдущего регулярного выражения. Например, а? соответствует любой строке, которая содержит ноль или одно вхождение a.
{2} Соответствует только 2 копиям предыдущего регулярного выражения. Например, p{3} соответствует ровно трем символам «p», но не четырем.
{2, 4} Соответствует от 2 до 4 повторений предыдущего регулярного выражения. Например, a{2,4} соответствует любой строке, содержащей от 3 до 5 символов ‘a’.
{3,} Соответствует минимум 3 копиям предыдущего регулярного выражения. Он попытается выполнить как можно больше повторений.
Например, p{3,} соответствует как минимум трем символам «p».
Квантификаторы регулярных выражений Python

Флаги регулярных выражений

Все методы модуля RE принимают необязательный аргумент флагов, используемый для включения различных уникальных функций и вариантов синтаксиса.

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

Подробнее: Руководство по флагам регулярных выражений Python

Нажмите на каждый флаг , чтобы изучить его подробно.

9 соответствует шаблону в начале строки и в начале каждой новой строки ( \n ).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Флаг длинный синтаксис Значение