Python – Erstatning af mønstre i tekst ved hjælp af regex
Regulært udtryk (regex) er beregnet til at trække de nødvendige oplysninger ud fra enhver tekst, der er baseret på mønstre. De er også meget brugt til at manipulere de mønsterbaserede tekster, hvilket fører til tekstforbehandling og er meget nyttige til at implementere digitale færdigheder som f.eks. Naturlig sprogbehandling (NLP) .
Denne artikel viser, hvordan man bruger regex til at erstatte mønstre ved at give flere eksempler, hvor hvert eksempel er et unikt scenarie i sit eget. Det er meget nødvendigt at forstå re.sub()> metode til re> (regulært udtryk) modul for at forstå de givne løsninger.
Det re.sub()> metoden udfører global søgning og global erstatning på den givne streng. Det bruges til at erstatte et bestemt mønster i strengen. Der er i alt 5 argumenter for denne funktion.
Syntaks: re.sub(mønster, repl, streng, antal=0, flag=0)
Parametre:
mønster – det mønster, der skal søges og erstattes
repl – den streng, som mønsteret skal udskiftes med
streng – navnet på den variabel, hvori mønsteret er gemt
count – antal tegn, op til hvilken substitution vil blive udført
flag – det bruges til at ændre betydningen af regex-mønsteret
count>ogflags>er valgfrie argumenter.
Eksempel 1: Substitution af et specifikt tekstmønster
I dette eksempel vil et givet tekstmønster blive søgt og erstattet i en streng. Ideen er at bruge den meget normale form for re.sub()> metode med kun de første 3 argumenter.
Nedenfor er implementeringen.
# 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()> |
Produktion:
It is sunny outside. Thank you so so much.
Uanset hvor mange gange det nødvendige mønster er til stede i strengen,
re.sub()>funktion erstatter dem alle med det givne mønster. Derfor er begge 'meget' erstattet af 'så' i ovenstående eksempel.
Eksempel 2: Erstatning af et tegnsæt med et bestemt tegn
Opgaven er at erstatte et tegnsæt med et givet tegn. Et tegnsæt betyder en række tegn. I den re.sub()> metode skrives et tegnsæt inden for [ ](kantede parenteser).
I dette eksempel vil små bogstaver, dvs. [a-z], blive erstattet af cifferet 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()> |
Produktion:
22 A0000 00 0000000000 00 E0000 D00.
Hvis der er behov for at erstatte både små og store bogstaver, er vi nødt til at introducere det store tegnsæt på denne måde: [a-zA-Z] eller effektiv måde at gøre det på er ved at bruge flag.
Eksempel 3: Skift-uafhængig udskiftning af et tegnsæt med et specifikt tegn
I dette eksempel vil både små og store bogstaver blive erstattet af det givne tegn. Med brug af flag , kan denne opgave udføres meget nemt.
Det re.I> flag står for vedr. IGNORMEREDE . Ved at introducere dette flag i re.sub()> metode og nævne ethvert tegnsæt, dvs. små eller store bogstaver, opgaven kan udføres.
Nedenfor er implementeringen.
# 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()> |
Produktion:
22 00000 00 0000000000 00 00000 000.
Eksempel 4: Udfør substitution op til et vist antal tegn
I dette eksempel vil substitution være op til et bestemt antal tegn og ikke på hele strengen. For at udføre denne type substitution re.sub()> metoden har et argument count> .
Ved at angive en numerisk værdi til dette argument, kan antallet af tegn, som substitution vil finde sted, kontrolleres. Nedenfor er implementeringen.
# 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()> |
Produktion:
000000 00ur Passion.
Eksempel 5: Substitution ved brug af stenografitegnklasse og forbehandling af tekst
Regex-modulet giver mange stenografiske tegnklasser for de tegnsæt, som er meget almindelige under forbehandling af tekst. Brug af stenografiske tegnklasse resulterer i skrivning af effektiv kode og mindsker behovet for at huske rækkevidden af hvert tegnsæt.
For at få en detaljeret forklaring af stenografi karakterklasse og hvordan man skriver regulære udtryk i python til forbehandling af tekst klik her . Følgende er nogle af de almindeligt anvendte stenografiske karakterklasser:
w: matcher alfanumeriske tegn
W: matcher ikke-alfanumeriske tegn som @, #, ‘, +, %, –
d: matcher ciffertegn
s: matcher mellemrumstegnBetydning af noget syntaks:
tilføjelse af et plus(+)-symbol efter en karakterklasse eller et sæt: gentagelse af foregående tegnklasse eller sæt i mindst 1 eller flere gange.tilføjelse af et stjerne(*)-symbol efter en karakterklasse eller et sæt: gentagelse af foregående tegnklasse eller sæt i mindst 0 eller flere gange.
tilføjelse af et caret(^)-symbol før en karakterklasse eller et sæt: matchende position bestemmes for denne karakterklasse eller sæt i begyndelsen af strengen.
tilføjelse af et dollar($)-symbol efter en karakterklasse eller et sæt: matchende position bestemmes for denne karakterklasse eller sæt i slutningen af strengen.
Dette eksempel demonstrerer brugen af nævnte stenografiske tegnklasser til substitution og forbehandling af tekst for at få rene og fejlfrie strenge. Nedenfor er implementeringen.
# 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()> |
Produktion:
Olympic games have been cancelled Dr Vikram Sarabhai was the ISRO first chairman Dr Abdul Kalam the father of India missile programme