Python RegEx: re.match(), re.search(), re.findall() с пример

В какво е регулярният израз Python?

A Редовен израз (RE) в език за програмиране е специален текстов низ, използван за описание на модел на търсене. Той е изключително полезен за извличане на информация от текст като код, файлове, журнал, електронни таблици или дори документи.

Докато използвате Python регулярен израз, първото нещо, което трябва да разберете, е, че всичко по същество е символ и ние пишем модели, за да съответства на конкретна последователност от знаци, наричана още низ. Ascii или латинските букви са тези, които са на вашите клавиатури и Unicode се използва за съпоставяне на чуждия текст. Той включва цифри и препинателни знаци и всички специални знаци като $#@!% и т.н.

Например, a Python регулярният израз може да каже на програма да търси конкретен текст от низа и след това да отпечата съответно резултата. Изразът може да включва

  • Текстово съвпадение
  • повторение
  • разклонен
  • Модел-композиция и др.

Редовен израз или RegEx в Python се обозначава като RE (RE, регулярни изрази или модел на регулярен израз) се импортират чрез повторен модул. Python поддържа регулярни изрази чрез библиотеки. RegEx в Python поддържа различни неща като Модификатори, идентификатори и празни знаци.

Идентификатори Модификатори Празни знаци Изисква се бягство
\d= произволно число (цифра) \d представлява цифра. Пример: \d{1,5} ще декларира цифра между 1,5 като 424,444,545 и т.н. \n = нов ред . + * ? [] $ ^ () {} | \
\D= всичко друго освен число (нецифрено) + = съвпада с 1 или повече \s= интервал
\s = интервал
(табулация, интервал, нов ред и т.н.)
? = съвпада с 0 или 1 \t =раздел
\S= всичко друго освен интервал * = 0 или повече \e = бягство
\w = букви ( Съвпадение на буквено-цифров знак, включително „_“) $ съответства на края на низ \r = връщане на каретка
\W = всичко освен букви (Съвпада с небуквено-цифров знак, с изключение на „_“) ^ съответства на началото на низ \f= емисия на формуляр
. = всичко освен букви (точки) | съвпада или с x/y ------
\b = произволен знак с изключение на нов ред [] = диапазон или „вариация“ ------
\. {x} = това количество предходен код ------

Синтаксис на регулярен израз (RE).

import re
  • “re” модул включен с Python основно се използва за търсене и манипулиране на низове
  • Използва се често и за уеб страница „Извличане” (извличане на голямо количество данни от уебсайтове)

Ще започнем урока за изрази с това просто упражнение, като използваме изразите (w+) и (^).

Пример за w+ и ^ израз

  • „^“: Този израз съответства на началото на низ
  • „w+“: Този израз съответства на буквено-цифровия знак в низа

Тук ще видим а Python RegEx Пример за това как можем да използваме w+ и ^ израз в нашия код. Покриваме функцията re.findall() в Python, по-късно в този урок, но за известно време просто се фокусираме върху \w+ и \^ израз.

Например, за нашия низ „guru99, образованието е забавно“, ако изпълним кода с w+ и^, той ще даде изхода „guru99“.

Пример за w+ и ^ израз

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print(r1)

Не забравяйте, че ако премахнете знака + от w+, изходът ще се промени и ще даде само първия знак от първата буква, т.е. [g]

Пример за израз \s във функция re.split

  • “s”: Този израз се използва за създаване на интервал в низа

За да разберете как този RegEx в Python работи, започваме с просто Python RegEx Пример за функция за разделяне. В примера сме разделили всяка дума с помощта на функцията “re.split” и в същото време сме използвали израз \s, който позволява да анализираме всяка дума в низа отделно.

\s израз във функцията re.split

Когато изпълните този код, той ще ви даде изхода ['we', 'are', 'splitting', 'the', 'words'].

Сега нека видим какво ще се случи, ако премахнете „\“ от s. В изхода няма азбука 's', това е така, защото премахнахме '\' от низа и той оценява “s” като обикновен знак и по този начин разделя думите навсякъде, където намери “s” в низа.

\s израз във функцията re.split

По същия начин има серия от други Python регулярен израз, който можете да използвате по различни начини в Python като \d,\D,$,\.,\b и т.н.

Ето пълния код

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print((re.split(r'\s','we are splitting the words')))
print((re.split(r's','split the words')))

След това ще видим типовете методи, които се използват с регулярен израз в Python.

Използване на методи за регулярен израз

Пакетът “re” предоставя няколко метода за реално изпълнение на заявки към входен низ. Ще видим методите на re in Python:

  • re.match()
  • re.search()
  • re.findall()

Забележка: Въз основа на регулярните изрази, Python предлага две различни примитивни операции. Методът за съвпадение проверява за съвпадение само в началото на низа, докато търсенето проверява за съвпадение навсякъде в низа.

re.match()

re.match() функция на re in Python ще търси в шаблона на регулярен израз и ще върне първото срещане. The Python Методът RegEx Match проверява за съвпадение само в началото на низа. Така че, ако се намери съвпадение в първия ред, той връща обекта за съвпадение. Но ако се намери съвпадение в някой друг ред, Python Функцията RegEx Match връща нула.

Например, разгледайте следния код на Python функция re.match(). Изразът “w+” и “\W” ще съответства на думите, започващи с буквата 'g' и след това всичко, което не започва с 'g', не се идентифицира. За да проверим съвпадението за всеки елемент в списъка или низа, изпълняваме forloop в това Python re.match() Пример.

re.match()

re.search(): Намиране на модел в текст

re.search() ще търси в шаблона на регулярен израз и ще върне първото срещане. За разлика от Python re.match(), той ще провери всички редове на входния низ. The Python функцията re.search() връща съвпадащ обект, когато моделът е намерен и „null“, ако шаблонът не е намерен

Как да използвам search()?

За да използвате функцията search(), трябва да импортирате Python първо модул re и след това изпълнете кода. The Python функцията re.search() взема „модела“ и „текст“ за сканиране от нашия основен низ

използвай search()

Например тук търсим два литерални низа „Тестване на софтуер“ „guru99“, в текстов низ „Софтуер Тестване е забавно”. За „тестване на софтуер“ открихме съвпадението, следователно връща резултата от Python re.search() Пример като „намерено съвпадение“, докато за думата „guru99“ не можахме да намерим в низ, следователно връща резултата като „Няма съвпадение“.

re.findall()

findall() модулът се използва за търсене на „всички“ събития, които съответстват на даден модел. Обратно, модулът search() ще върне само първото срещане, което съответства на посочения модел. findall() ще премине през всички редове на файла и ще върне всички неприпокриващи се съвпадения на шаблон в една стъпка.

Как да използвате re.findall() в Python?

Тук имаме списък с имейл адреси и искаме всички имейл адреси да бъдат извлечени от списъка, използваме метода re.findall() в Python. Той ще намери всички имейл адреси от списъка.

Използвайте re.findall() в Python

Ето пълния код за Пример за re.findall()

import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print((z.groups()))
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print('Looking for "%s" in "%s" ->' % (pattern, text), end=' ')
    if re.search(pattern, text):
        print('found a match!')
else:
    print('no match')
abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print(email)

Python Знамена

Много Python Методите на Regex и функциите на Regex приемат незадължителен аргумент, наречен Flags. Тези флагове могат да променят значението на даденото Python Модел на регулярен израз. За да ги разберем, ще видим един или два примера за тези знамена.

Различни знамена, използвани в Python включва

Синтаксис за флаговете на Regex Какво прави това знаме
[re.M] Направете началото/края да вземе предвид всеки ред
[re.I] Игнорира малки и големи букви
[re.S] Направи [ . ]
[re.U] Направете { \w,\W,\b,\B} да следва правилата на Unicode
[re.L] Накарайте {\w,\W,\b,\B} да следва локала
[re.X] Разрешете коментар в Regex

Пример за re.M или многоредови флагове

В многоредовия модел символът [^] съвпада с първия знак от низа и началото на всеки ред (следва непосредствено след всеки нов ред). Докато изразът малък „w“ се използва за маркиране на интервала със знаци. Когато стартирате кода, първата променлива “k1” отпечатва само знака 'g' за дума guru99, докато когато добавите многоредов флаг, тя извлича първите знаци от всички елементи в низа.

Пример за re.M или многоредови флагове

Ето кода

import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print(k1)
print(k2)
  • Декларирахме променливата xx за низ ” guru99…. careerguru99….селен”
  • Стартирайте кода без използване на многоредови флагове, той дава изход само 'g' от редовете
  • Стартирайте кода с флаг „multiline“, когато отпечатате „k2“, той дава изход като „g“, „c“ и „s“
  • И така, разликата, която можем да видим след и преди добавяне на няколко реда в горния пример.

По същия начин можете да използвате и други Python флагове като re.U (Unicode), re.L (Следване на локал), re.X (Разрешаване на коментар) и др.

Python 2 Пример

Горните кодове са Python 3 примера, ако искате да се включите Python 2, моля, разгледайте следния код.

# Example of w+ and ^ Expression
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print r1

# Example of \s expression in re.split function
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print (re.split(r'\s','we are splitting the words'))
print (re.split(r's','split the words'))

# Using re.findall for text
import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print(z.groups())
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print 'Looking for "%s" in "%s" ->' % (pattern, text),
    if re.search(pattern, text):
        print 'found a match!'
else:
    print 'no match'
abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print email

# Example of re.M or Multiline Flags
import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print k1
print k2

Тествайте своя Python Знание - Sanxin

1. Кой метод се използва за намиране на всички срещания на шаблон в низ?

  • re.search()
  • re.match()
  • re.findall()
  • re.split()
re.findall() се използва за намиране на всички срещания на шаблон в низ.

2. Какво представлява символният клас \d в регулярните изрази?

  • Всяка цифра (0-9)
  • Всеки нецифрен знак
  • Всеки празен знак
  • Всяка буква или цифра
\d представлява всяка цифра (0-9).

3. Коя функция бихте използвали, за да разделите низ въз основа на интервали?

  • re.split(r'\s', низ)
  • re.findall(r'\w+', низ)
  • re.match(r'\s+', низ)
  • re.split(r'\w+', низ)
re.split(r'\s', string) разделя низ въз основа на интервали, използвайки израза \s.

4. Каква е основната разлика между re.match() и re.search()?

  • re.match() търси модел в началото на низа, докато re.search() търси модел навсякъде в низа.
  • re.match() връща всички съвпадения, докато re.search() връща първото съвпадение.
  • re.search() е по-бърз от re.match().
  • И двете функции се държат по същия начин.
re.match() търси модел в началото на низа, докато re.search() търси модел навсякъде в низа.

Oбобщение

Регулярен израз в a програмен език е специален текстов низ, използван за описание на модел на търсене. Той включва цифри и препинателни знаци и всички специални знаци като $#@!% и т.н. Изразът може да включва литерал

  • Текстово съвпадение
  • повторение
  • разклонен
  • Модел-композиция и др.

In Python, регулярен израз се обозначава като RE (RE, регулярни изрази или модел на регулярен израз) са вградени чрез Python повторен модул.

  • “re” модул включен с Python основно се използва за търсене и манипулиране на низове
  • Използва се често и за „извличане“ на уеб страници (извличане на голямо количество данни от уебсайтове)
  • Методите за регулярен израз включват re.match(),re.search()& re.findall()
  • Други Python Методите за замяна на RegEx са sub() и subn(), които се използват за замяна на съвпадащи низове в re
  • Python Знамена Много Python Методите на Regex и функциите на Regex приемат незадължителен аргумент, наречен Flags
  • Тези флагове могат да променят значението на дадения шаблон на Regex
  • Различни Python флаговете, използвани в методите на Regex, са re.M, re.I, re.S и т.н.