logo

Python: substitució de patrons al text mitjançant expresions regulars

L'expressió regular (regex) està pensada per extreure la informació necessària de qualsevol text que es basa en patrons. També s'utilitzen àmpliament per manipular textos basats en patrons que condueixen al preprocessament de text i són molt útils per implementar habilitats digitals com ara Processament del llenguatge natural (PNL) .

Aquest article demostra com utilitzar regex per substituir patrons proporcionant diversos exemples on cada exemple és un escenari únic. És molt necessari entendre elre.sub()>mètode dere>(expressió regular) mòdul per comprendre les solucions donades.



Elre.sub()>El mètode realitza la cerca global i la substitució global a la cadena donada. S'utilitza per substituir un patró específic a la cadena. Hi ha un total de 5 arguments d'aquesta funció.

Sintaxi: re.sub(patró, repl, cadena, recompte=0, banderes=0)

programa en java

Paràmetres:
patró: el patró que s'ha de cercar i substituir
repl: la cadena amb la qual s'ha de substituir el patró
cadena: el nom de la variable en què s'emmagatzema el patró
count: nombre de caràcters fins al qual es realitzarà la substitució
flags: s'utilitza per modificar el significat del patró d'expressió regular



count>i flags>són arguments opcionals.

Exemple 1: Substitució d'un patró de text específic
En aquest exemple, es cercarà un patró de text determinat i es substituirà en una cadena. La idea és utilitzar la forma molt normal de lare.sub()>mètode amb només els 3 primers arguments.

A continuació es mostra la implementació.






# Python implementation of substituting a> # specific text pattern in a string using regex> > # importing regex module> import> re> > # Function to perform> # operations on the strings> def> substitutor():> > ># a string variable> >sentence1>=> 'It is raining outside.'> > ># replacing text 'raining' in the string> ># variable sentence1 with 'sunny' thus> ># passing first parameter as raining> ># second as sunny, third as the> ># variable name in which string is stored> ># and printing the modified string> >print>(re.sub(r>'raining'>,>'sunny'>, sentence1))> > ># a string variable> >sentence2>=> 'Thank you very very much.'> > ># replacing text 'very' in the string> ># variable sentence2 with 'so' thus> ># passing parameters at their> ># appropriate positions and printing> ># the modified string> >print>(re.sub(r>'very'>,>'so'>, sentence2))> > # Driver Code:> substitutor()>

>

>

Sortida:

 It is sunny outside. Thank you so so much.>

No importa quantes vegades el patró requerit estigui present a la cadena, elre.sub()>La funció els substitueix tots amb el patró donat. És per això que els dos 'molt' es substitueixen per 'tan' a l'exemple anterior.

Exemple 2: Substitució d'un conjunt de caràcters per un caràcter específic
La tasca és substituir un conjunt de caràcters per un caràcter determinat. Un conjunt de caràcters significa un rang de caràcters. En elre.sub()>mètode s'escriu un conjunt de caràcters dins de [ ] (parèntesis).

En aquest exemple, el conjunt de caràcters en minúscules, és a dir, [a-z] se substituirà pel dígit 0. A continuació es mostra la implementació.




poda alfa beta
# Python implementation of substituting> # a character set with a specific character> > # importing regex module> import> re> > # Function to perform> # operations on the strings> def> substitutor():> > ># a string variable> >sentence>=> '22 April is celebrated as Earth Day.'> > ># replacing every lower case characters> ># in the variable sentence with 0 and> ># printing the modified string> >print>(re.sub(r>'[a-z]'>,>'0'>, sentence))> > # Driver Code:> substitutor()>

>

>

Sortida:

 22 A0000 00 0000000000 00 E0000 D00.>

Si cal substituir el conjunt de caràcters en majúscules i minúscules, hem d'introduir el conjunt de caràcters en majúscules d'aquesta manera: [a-zA-Z] o el efectiu La manera de fer-ho és utilitzant banderes.

Exemple 3: substitució insensible a majúscules i minúscules d'un conjunt de caràcters amb un caràcter específic
En aquest exemple, tant els caràcters minúscules com els majúscules se substituiran pel caràcter donat. Amb l'ús de banderes , aquesta tasca es pot dur a terme molt fàcilment.

Elre.I>bandera significa re. IGNORECASE . En introduir aquesta bandera alre.sub()>mètode i esmentant qualsevol conjunt de caràcters, és a dir, en minúscules o en majúscules, es pot completar la tasca.

A continuació es mostra la implementació.




# Python implementation of case-insensitive substitution> # of a character set with a specific character> > # importing regex module> import> re> > # Function to perform> # operations on the strings> def> substitutor():> > ># a string variable> >sentence>=> '22 April is celebrated as Earth Day.'> > ># replacing both lowercase and> ># uppercase characters with 0 in> ># the variable sentence by using> ># flag and printing the modified string> >print>(re.sub(r>'[a-z]'>,>'0'>, sentence, flags>=> re.I))> > # Driver Code:> substitutor()>

>

>

Sortida:

 22 00000 00 0000000000 00 00000 000.>

Exemple 4: Realitzeu la substitució fins a un nombre determinat de caràcters
En aquest exemple, la substitució serà fins a un nombre específic de caràcters i no a tota la cadena. Per realitzar aquest tipus de substitució elre.sub()>El mètode té un argumentcount>.

En proporcionar un valor numèric a aquest argument, es pot controlar el nombre de caràcters en què es produirà la substitució. A continuació es mostra la implementació.




# Python implementation to perform substitution> # up to a certain number of characters> > # importing regex module> import> re> > # Function to perform> # operations on the strings> def> substitutor():> > ># a string variable> >sentence>=> 'Follow your Passion.'> > ># case-insensitive substitution> ># on variable sentence upto> ># eight characters and printing> ># the modified string> >print>(re.sub(r>'[a-z]'>,>'0'>, sentence,>8>, flags>=> re.I))> > # Driver Code:> substitutor()>

>

buit 0
>

Sortida:

 000000 00ur Passion.>

Exemple 5: Substitució mitjançant classe de caràcters taquigràfics i preprocessament del text
El mòdul Regex proporciona moltes classes de caràcters abreviats per a aquells conjunts de caràcters que són molt comuns durant el preprocessament del text. L'ús de classes de caràcters abreviats permet escriure codi eficient i redueix la necessitat de recordar l'interval de cada conjunt de caràcters.

string.format java string

Per obtenir una explicació detallada de la classe de caràcters taquigràfics i com escriure expressions regulars en Python per al preprocessament del text, feu clic aquí . A continuació es mostren algunes de les classes de caràcters taquigràfics que s'utilitzen habitualment:

w: coincideix amb caràcters alfanumèrics
W: coincideix amb caràcters no alfanumèrics com @, #, ‘, +, %, –
d: coincideix amb els caràcters dels dígits
s: coincideix amb els espais en blanc

Significat d'alguna sintaxi:
afegir un símbol més (+) després d'una classe o conjunt de caràcters: repetició de la classe o conjunt de caràcters anteriors almenys 1 o més vegades.

afegir un símbol d'asterisc (*) després d'una classe o conjunt de caràcters: repetició de la classe o conjunt de caràcters anteriors almenys 0 o més vegades.

afegint un símbol de cursor (^) abans d'una classe o conjunt de caràcters: la posició coincident es determina per a aquesta classe de caràcters o s'estableix al principi de la cadena.

afegir un símbol de dòlar ($) després d'una classe o conjunt de caràcters: la posició de concordança es determina per a aquesta classe de caràcters o s'estableix al final de la cadena.

Aquest exemple demostra l'ús de les classes de caràcters abreviats esmentades per a la substitució i el preprocessament de text per obtenir cadenes netes i sense errors. A continuació es mostra la implementació.




# Python implementation of Substitution using> # shorthand character class and preprocessing of text> > # importing regex module> import> re> > # Function to perform> # operations on the strings> def> substitutor():> > ># list of strings> >S>=> [>'2020 Olympic games have @# been cancelled'>,> >'Dr Vikram Sarabhai was +%--the ISRO’s first chairman'>,> >'Dr Abdul Kalam, the father of India's missile programme'>]> > ># loop to iterate every element of list> >for> i>in> range>(>len>(S)):> > ># replacing every non-word character with a white space> >S[i]>=> re.sub(r>'W'>,>' '>, S[i])> > ># replacing every digit character with a white space> >S[i]>=> re.sub(r>'d'>,>' '>, S[i])> > ># replacing one or more white space with a single white space> >S[i]>=> re.sub(r>'s+'>,>' '>, S[i])> > ># replacing alphabetic characters which have one or more> ># white space before and after them with a white space> >S[i]>=> re.sub(r>'s+[a-z]s+'>,>' '>, S[i], flags>=> re.I)> > ># substituting one or more white space which is at> ># beginning of the string with an empty string> >S[i]>=> re.sub(r>'^s+'>, '', S[i])> > ># substituting one or more white space which is at> ># end of the string with an empty string> >S[i]>=> re.sub(r>'s+$'>, '', S[i])> > ># loop to iterate every element of list> >for> i>in> range>(>len>(S)):> > ># printing each modified string> >print>(S[i])> > # Driver Code:> substitutor()>

>

>

Sortida:

 Olympic games have been cancelled Dr Vikram Sarabhai was the ISRO first chairman Dr Abdul Kalam the father of India missile programme>