Python: sostituzione di modelli nel testo utilizzando regex

L'espressione regolare (regex) è pensata per estrarre le informazioni richieste da qualsiasi testo basato su modelli. Sono anche ampiamente utilizzati per manipolare testi basati su modelli che portano alla preelaborazione del testo e sono molto utili per implementare competenze digitali come Elaborazione del linguaggio naturale (PNL) .

Questo articolo illustra come utilizzare l'espressione regolare per sostituire i modelli fornendo più esempi in cui ogni esempio rappresenta uno scenario unico a sé stante. È molto necessario comprendere il re.sub()> metodo di re> (espressione regolare) modulo per comprendere le soluzioni fornite.

IL re.sub()> Il metodo esegue la ricerca globale e la sostituzione globale sulla stringa specificata. Viene utilizzato per sostituire un modello specifico nella stringa. Ci sono in totale 5 argomenti di questa funzione.

Sintassi: re.sub(modello, sostituzione, stringa, conteggio=0, flag=0)

parametri:
modello – il modello che deve essere cercato e sostituito
repl – la stringa con cui sostituire il pattern
stringa – il nome della variabile in cui è memorizzato il modello
count – numero di caratteri fino al quale verrà eseguita la sostituzione
flags: viene utilizzato per modificare il significato del modello regex

count> E flags> sono argomenti facoltativi.

Esempio 1: sostituzione di un modello di testo specifico
In questo esempio, un dato modello di testo verrà cercato e sostituito in una stringa. L'idea è quella di utilizzare la forma molto normale di re.sub()> metodo con solo i primi 3 argomenti.

Di seguito è riportata l'implementazione.




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

Produzione:

 It is sunny outside. Thank you so so much. 

Non importa quante volte il modello richiesto è presente nella stringa, il file re.sub()> la funzione li sostituisce tutti con il modello specificato. Ecco perché entrambi i “molto” sono sostituiti da “so” nell’esempio precedente.

Esempio 2: sostituzione di un set di caratteri con un carattere specifico
Il compito è sostituire un set di caratteri con un determinato carattere. Un set di caratteri indica un intervallo di caratteri. Nel re.sub()> metodo un set di caratteri viene scritto all'interno di [ ](parentesi quadre).

In questo esempio, il set di caratteri minuscoli, ovvero [a-z], verrà sostituito dalla cifra 0. Di seguito è riportata l'implementazione.




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

Produzione:

 22 A0000 00 0000000000 00 E0000 D00. 

Se è necessario sostituire sia il set di caratteri minuscoli che quelli maiuscoli, allora dobbiamo introdurre il set di caratteri maiuscoli in questo modo: [a-zA-Z] o il efficace Il modo migliore per farlo è usare i flag.

Esempio 3: sostituzione senza distinzione tra maiuscole e minuscole di un set di caratteri con un carattere specifico
In questo esempio, sia i caratteri minuscoli che quelli maiuscoli verranno sostituiti dal carattere specificato. Con l'uso di bandiere , questo compito può essere svolto molto facilmente.

IL re.I> flag sta per re. IGNORECASE . Introducendo questo flag nel file re.sub()> metodo e menzionando un qualsiasi set di caratteri, ad esempio minuscolo o maiuscolo, è possibile completare l'attività.

Di seguito è riportata l'implementazione.




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

Produzione:

 22 00000 00 0000000000 00 00000 000. 

Esempio 4: eseguire la sostituzione fino a un certo numero di caratteri
In questo esempio, la sostituzione riguarderà un numero specifico di caratteri e non l'intera stringa. Per eseguire questo tipo di sostituzione il re.sub()> il metodo ha un argomento count> .

Fornendo un valore numerico a questo argomento, è possibile controllare il numero di caratteri su cui avverrà la sostituzione. Di seguito è riportata l'implementazione.




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

Produzione:

 000000 00ur Passion. 

Esempio 5: sostituzione mediante classe di caratteri abbreviati e preelaborazione del testo
Il modulo Regex fornisce molte classi di caratteri abbreviati per quei set di caratteri che sono molto comuni durante la preelaborazione del testo. L'utilizzo della classe di caratteri abbreviati consente di scrivere codice efficiente e di ridurre la necessità di ricordare l'intervallo di ogni set di caratteri.

Per ottenere una spiegazione dettagliata della classe di caratteri abbreviati e come scrivere un'espressione regolare in Python per la preelaborazione del testo, fare clic su Qui . Di seguito sono riportate alcune delle classi di caratteri abbreviati comunemente usate:

w: corrisponde a caratteri alfanumerici
W: corrisponde a caratteri non alfanumerici come @, #, ', +, %, –
d: corrisponde ai caratteri cifra
s: corrisponde ai caratteri dello spazio bianco

Significato di alcune sintassi:
aggiunta di un simbolo più (+) dopo una classe o un set di caratteri: ripetizione della classe o set di caratteri precedente per almeno 1 o più volte.

aggiunta di un simbolo asterisco (*) dopo una classe o un insieme di caratteri: ripetizione della classe o insieme di caratteri precedente per almeno 0 o più volte.

aggiunta di un simbolo di accento circonflesso (^) prima di una classe o set di caratteri: la posizione corrispondente viene determinata per quella classe di caratteri o impostata all'inizio della stringa.

aggiunta di un simbolo dollaro ($) dopo una classe o un set di caratteri: la posizione corrispondente viene determinata per quella classe di caratteri o impostata alla fine della stringa.

Questo esempio dimostra l'uso delle classi di caratteri abbreviati menzionate per la sostituzione e la preelaborazione del testo per ottenere stringhe pulite e prive di errori. Di seguito è riportata l'implementazione.




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

Produzione:

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