És possible que estigueu familiaritzat amb la cerca de text prement Ctrl-F i escrivint les paraules que cerqueu. Les expressions regulars van un pas més enllà: us permeten especificar un patró de text per cercar. En aquest article, veurem com funciona la concordança de patrons a Python amb Regex.
Regex en Python
Expressions regulars , també anomenat expressió regular , són descripcions d'un patró de text. Pot detectar la presència o absència d'un text fent coincidir-lo amb un patró determinat i també pot dividir un patró en un o més sub-patrons. Per exemple, a d en una expressió regular representa un caràcter de dígit, és a dir, qualsevol número únic entre 0 i 9.
Comproveu els números de telèfon amb Regex a Python
La següent expressió regular s'utilitza a Python per fer coincidir una cadena de tres números, un guionet, tres números més, un altre guionet i quatre números.
Any other string would not match the pattern. ddd-ddd-dddd>
Les expressions regulars poden ser molt més sofisticades. Per exemple, afegir un 3 entre claudàtors ({3}) després d'un patró és com dir: Coincideix aquest patró tres vegades. Per tant, l'expressió regular una mica més curta és la següent:
llista d'ordenació java
d{3}-d{3}-d{4}> Coincideix amb el format de número de telèfon correcte.
Concordança de patrons amb expressions regulars
Un objecte Regex cerca() El mètode cerca la cadena que se li passa per qualsevol coincidència amb l'expressió regular. Els objectes Match tenen un mètode group() que retornarà el text coincident real de la cadena cercada. També pots veureFolla d'expressió regularper a més informació.
Exemple: Importeu el mòdul regex amb import re. Creeu un objecte Regex amb elre.compile()funció. (Recordeu utilitzar una cadena en brut.) Passeu la cadena que voleu cercar al mètode search() de l'objecte Regex. Això retorna un objecte Match. Truqueu al mètode group() de l'objecte Match per retornar una cadena del text real coincident.
Python 3
# Python program to illustrate> # Matching regex objects> import> re> > # regex object> phoneNumRegex>=> re.>compile>(r>'ddd-ddd-dddd'>)> mo>=> phoneNumRegex.search(>'My number is 415-555-4242.'>)> print>(>'Phone number found: '> +> mo.group())> |
>
>
Sortida:
Phone number found: 415-555-4242>
Parèntesis per agrupar i capturar amb Regex
Una de les maneres de fer coincidir patrons amb Regex és utilitzar parèntesis al voltant dels patrons. Vegem alguns exemples diferents per a una millor comprensió.
Objectes coincidents
Digueu que voleu separar el codi d'àrea de la resta del número de telèfon. Afegir parèntesis crearà grups a l'expressió regular: (ddd)-(ddd-dddd). A continuació, podeu utilitzar el mètode d'objecte de concordança group() per agafar el text coincident d'un sol grup.
Python 3
import> re> phoneNumRegex>=> re.>compile>(r>'(ddd)-(ddd-dddd)'>)> mo>=> phoneNumRegex.search(>'My number is 415-555-4242.'>)> print>(mo.group(>1>))> areaCode, number>=> mo.groups()> print>(>'area code:'>, areaCode)> print>(>'number:'>, number)> |
>
>
Sortida:
415 area code: 415 number: 555-4242>
Recuperar tots els grups alhora
Si voleu recuperar tots els grups alhora, utilitzeu el mètode groups(), i tingueu en compte la forma plural del nom.
Python 3
com convertir un nombre enter en una cadena en java
import> re> phoneNumRegex>=> re.>compile>(r>'(ddd)-(ddd-dddd)'>)> mo>=> phoneNumRegex.search(>'My number is 415-555-4242.'>)> print>(mo.groups())> |
>
>
Sortida:
('415', '555-4242')> Relaciona un parèntesi
Els parèntesis tenen un significat especial en les expressions regulars, però què feu si necessiteu fer coincidir un parèntesi al vostre text. Per exemple, potser els números de telèfon que intenteu fer coincidir tenen el codi d'àrea establert entre parèntesis. En aquest cas, heu d'escapar els caràcters ( i ) amb una barra invertida. Introduïu el següent a l'intèrpret d'ordres interactiu:
Python 3
import> re> phoneNumRegex>=> re.>compile>(r>'((ddd)) (ddd-dddd)'>)> mo>=> phoneNumRegex.search(>'My phone number is (415) 555-4242.'>)> print>(mo.group(>1>))> |
>
>
Sortida:
(415)>
Els caràcters d'escapament ( i ) de la cadena en brut passat a re.compile() coincidiran amb els caràcters reals dels parèntesis.
Expressions regulars: l'agrupació i el caràcter Pipe
El | personatge s'anomena tub. El podem utilitzar a qualsevol lloc que vulguem per fer coincidir una de moltes expressions.
Exemple: L'expressió regular r'Batman|Tina Fey' coincidirà amb 'Batman' o 'Tina Fey'. Quan tant Batman com Tina Fey apareixen a la cadena cercada, la primera ocurrència del text coincident es retornarà com a objecte Match.
Python 3
# Python program to illustrate> # Matching regex objects> # with multiple Groups with the Pipe> import> re> heroRegex>=> re.>compile> (r>'Batman|Tina Fey'>)> mo1>=> heroRegex.search(>'Batman and Tina Fey.'>)> print>(mo1.group())> |
>
>
Sortida:
'Batman'>
Entendre les claus en Regex
Si tenim un grup que volem repetir un nombre determinat de vegades, seguiu el grup a l'expressió regular amb un número entre claudàtors.
Per exemple, l'expressió regular (Ha){3} coincidirà amb la cadena 'HaHaHa', però no coincidirà amb 'HaHa', ja que aquesta última només té dues repeticions del grup (Ha). En lloc d'un sol número, podeu especificar un interval entre claudàtors. L'expressió regular (Ha){3, 5} coincidirà amb 'HaHaHa', 'HaHaHaHa' i 'HaHaHaHaHa'. També podeu ometre el primer o el segon nombre entre claudàtors per deixar el mínim o el màxim sense límits. (Ha){3, } coincidirà amb tres o més instàncies del grup (Ha), mentre que (Ha){, 5} coincidirà entre zero i cinc instàncies. Els claudàtors poden ajudar a fer les teves expressions regulars més curtes.
Exemple 1: En aquest exemple, utilitzarem claudàtors per especificar l'ocurrència del patró que estem buscant.
Python 3
seqüència de Fibonacci java
# Python program to illustrate> # Matching Specific Repetitions> # with Curly Brackets> import> re> haRegex>=> re.>compile>(r>'(Ha){3}'>)> mo1>=> haRegex.search(>'HaHaHa'>)> print>(mo1.group())> |
>
>
Sortida:
HaHaHa>
Exemple 2: En aquest exemple, definirem l'aparició del patró utilitzant claudàtors i després buscarem si hi ha un patró específic o no.
Python 3
# Python program to illustrate> # Matching Specific Repetitions> # with Curly Brackets> import> re> haRegex>=> re.>compile>(r>'(Ha){3}'>)> mo2>=> haRegex.search(>'Ha'>)>=>=> None> print>(mo2)> |
>
>
Sortida:
True>
Operador opcional o signe d'interrogació (?) en expressió regular
De vegades hi ha un patró que només voleu fer coincidir opcionalment. És a dir, l'expressió regular hauria de trobar una coincidència tant si aquesta part de text hi és com si no. El ? El caràcter marca el grup que el precedeix com a part opcional del patró.
Exemple 1: Aquí, buscarem un patró amb un patró 'Batman' o 'Batwoman'. El (on)? part de l'expressió regular significa que el patró wo és un grup opcional. L'expressió regular coincidirà amb el text que tingui zero instàncies o una instància de wo. És per això que l'expressió regular coincideix tant amb 'Batwoman' com 'Batman'. Pots pensar en el? com dient, grups Relaciona zero o un dels grups que precedeixen aquest signe d'interrogació.
Si necessiteu fer coincidir un signe d'interrogació real, escapeu-lo amb ?.
Python 3
# Python program to illustrate> # optional matching> # with question mark(?)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)?man'>)> mo1>=> batRegex.search(>'The Adventures of Batman'>)> mo2>=> batRegex.search(>'The Adventures of Batwoman'>)> print>(mo1.group())> print>(mo2.group())> |
>
>
Sortida:
Batman Batwoman>
Zero o més patrons que coincideixen amb l'estrella
El * (anomenat estrella o asterisc) significa coincideix amb zero o més — el grup que precedeix l'estrella pot aparèixer qualsevol nombre de vegades al text. Pot estar completament absent o repetir-se una i altra vegada. Si necessiteu fer coincidir un caràcter d'estrella real, prefixeu l'estrella a l'expressió regular amb una barra invertida, *.
Exemple 1: En aquest exemple, coincidirem amb les zero aparicions d'un patró a la cadena. La part (wo)* de l'expressió regular coincideix amb zero instàncies de wo a la cadena.
Python 3
# Python program to illustrate> # matching a regular expression> # with asterisk(*)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)*man'>)> mo1>=> batRegex.search(>'The Adventures of Batman'>)> print>(mo1.group())> |
>
img css align
>
Sortida:
Batman>
Exemple 2: En aquest exemple, coincidirem com a mínim amb una ocurrència d'un patró a la cadena.
Python
#python program to illustrate> #matching a regular expression> #with asterisk(*)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)*man'>)> mo2>=> batRegex.search(>'The Adventures of Batwoman'>)> print>(mo2.group())> |
>
>
Sortida:
Batwoman>
Exemple 3: En aquest exemple, coincidirem amb més d'una ocurrència d'un patró a la cadena.
Python
# Python program to illustrate> # matching a regular expression> # with asterisk(*)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)*man'>)> mo3>=> batRegex.search(>'The Adventures of Batwowowowoman'>)> print>(mo3.group())> |
>
>
Sortida:
Batwowowowoman>
Un o més patrons que coincideixen amb el Plus
Mentre * significa coincideix amb zero o més , els significats + (o més). coincideix amb un o més. A diferència de l'estrella, que no requereix que el seu grup aparegui a la cadena coincident, el grup que precedeix un signe més ha d'aparèixer almenys una vegada. No és opcional. Si necessiteu fer coincidir un caràcter de signe més real, prefixeu el signe més amb una barra invertida per escapar-lo: +.
Exemple 1: En aquest exemple, coincidirem com a mínim amb una ocurrència d'un patró a la cadena.
Python 3
# Python program to illustrate> # matching a regular expression> # with plus(+)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)+man'>)> mo1>=> batRegex.search(>'The Adventures of Batwoman'>)> print>(mo1.group())> |
>
>
Sortida:
Batwoman>
Exemple 2: En aquest exemple, l'expressió regular Bat(wo)+man no coincidirà amb la cadena 'Les aventures de Batman' perquè el signe més requereix almenys un wo.
xifres romanes 1100
Python
# Python program to illustrate> # matching a regular expression> # with plus(+)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)+man'>)> mo3>=> batRegex.search(>'The Adventures of Batman'>)>=>=> None> print>(mo3)> |
>
>
Sortida:
True>
Article relacionat – Regex Cheetsheet