Python – Bytter ut mønstre i tekst ved å bruke regulært uttrykk

Regular Expression (regex) er ment for å trekke ut nødvendig informasjon fra tekst som er basert på mønstre. De er også mye brukt for å manipulere de mønsterbaserte tekstene som fører til tekstforbehandling og er svært nyttige for å implementere digitale ferdigheter som Naturlig språkbehandling (NLP) .

Denne artikkelen viser hvordan du bruker regulært uttrykk for å erstatte mønstre ved å gi flere eksempler der hvert eksempel er et unikt scenario i seg selv. Det er veldig nødvendig å forstå re.sub()> Metode av re> (regulære uttrykk) modul for å forstå de gitte løsningene.

De re.sub()> metoden utfører globalt søk og global erstatning på den gitte strengen. Den brukes til å erstatte et spesifikt mønster i strengen. Det er totalt 5 argumenter for denne funksjonen.

Syntaks: re.sub(pattern, repl, string, count=0, flags=0)

Parametere:
mønster – mønsteret som skal søkes og erstattes
repl – strengen som mønsteret skal byttes ut med
streng – navnet på variabelen der mønsteret er lagret
count – antall tegn opp til som substitusjon vil bli utført
flagg - det brukes til å endre betydningen av regex-mønsteret

count> og flags> er valgfrie argumenter.

Eksempel 1: Substitusjon av et spesifikt tekstmønster
I dette eksemplet vil et gitt tekstmønster søkes og erstattes i en streng. Tanken er å bruke den helt normale formen re.sub()> metode med bare de tre første argumentene.

Nedenfor er gjennomføringen.




# 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()>

Produksjon:

 It is sunny outside. Thank you so so much. 

Uansett hvor mange ganger det nødvendige mønsteret er tilstede i strengen re.sub()> funksjon erstatter alle med det gitte mønsteret. Det er derfor begge 'veldig' er erstattet av 'så' i eksemplet ovenfor.

Eksempel 2: Bytte ut et tegnsett med et spesifikt tegn
Oppgaven er å erstatte et tegnsett med et gitt tegn. Et tegnsett betyr en rekke tegn. I re.sub()> metode et tegnsett skrives innenfor [ ](firkantede parenteser).

I dette eksemplet vil små bokstaver, dvs. [a-z] erstattes av sifferet 0. Nedenfor er implementeringen.




# 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()>

Produksjon:

 22 A0000 00 0000000000 00 E0000 D00. 

Hvis det er behov for å erstatte både små og store tegnsett, må vi introdusere det store tegnsettet på denne måten: [a-zA-Z] eller effektive måten å gjøre det på er å bruke flagg.

Eksempel 3: Skifte-usensitiv erstatning av et tegnsett med et spesifikt tegn
I dette eksemplet vil både små og store bokstaver erstattes av det gitte tegnet. Med bruk av flagg , kan denne oppgaven utføres veldig enkelt.

De re.I> flagg står for re. IGNORER . Ved å introdusere dette flagget i re.sub()> metode og nevne et hvilket som helst tegnsett, dvs. små eller store bokstaver, kan oppgaven fullføres.

Nedenfor er gjennomføringen.




# 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()>

Produksjon:

 22 00000 00 0000000000 00 00000 000. 

Eksempel 4: Utfør substitusjon opp til et visst antall tegn
I dette eksemplet vil substitusjon være opp til et spesifikt antall tegn og ikke på hele strengen. For å utføre denne typen substitusjon re.sub()> metoden har et argument count> .

Ved å gi en numerisk verdi til dette argumentet, kan antall tegn som substitusjon vil skje på, kontrolleres. Nedenfor er gjennomføringen.




# 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()>

Produksjon:

 000000 00ur Passion. 

Eksempel 5: Substitusjon ved bruk av stenografitegnklasse og forbehandling av tekst
Regex-modulen gir mange stenografiske tegnklasser for de tegnsettene som er svært vanlige under forbehandling av tekst. Bruk av stenografitegnklasse resulterer i å skrive effektiv kode og reduserer behovet for å huske rekkevidden til hvert tegnsett.

For å få en detaljert forklaring av stenografi-tegnklassen og hvordan du skriver regulære uttrykk i python for forhåndsbehandling av tekst, klikk her . Følgende er noen av de ofte brukte stenografiske karakterklassene:

w: samsvarer med alfanumeriske tegn
W: samsvarer med ikke-alfanumeriske tegn som @, #, ‘, +, %, –
d: samsvarer med siffertegn
s: samsvarer med mellomromstegn

Betydningen av noen syntaks:
legge til et pluss(+)-symbol etter en tegnklasse eller et sett: repetisjon av foregående tegnklasse eller sett i minst 1 eller flere ganger.

legge til et stjerne(*)-symbol etter en tegnklasse eller et sett: repetisjon av foregående tegnklasse eller sett i minst 0 eller flere ganger.

legge til et caret(^)-symbol før en tegnklasse eller et sett: samsvarende posisjon bestemmes for den tegnklassen eller satt i begynnelsen av strengen.

legge til et dollar($)-symbol etter en tegnklasse eller et sett: samsvarende posisjon bestemmes for den tegnklassen eller satt på slutten av strengen.

Dette eksemplet demonstrerer bruken av nevnte stenografiske tegnklasser for substitusjon og forbehandling av tekst for å få rene og feilfrie strenger. Nedenfor er gjennomføringen.




# 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()>

Produksjon:

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