Python: sustitución de patrones en texto usando expresiones regulares

La expresión regular (regex) está destinada a extraer la información requerida de cualquier texto que se base en patrones. También se utilizan ampliamente para manipular textos basados ​​en patrones, lo que conduce al preprocesamiento del texto y son muy útiles para implementar habilidades digitales como Procesamiento del lenguaje natural (PNL) .

Este artículo demuestra cómo utilizar expresiones regulares para sustituir patrones proporcionando múltiples ejemplos donde cada ejemplo es un escenario único en sí mismo. Es muy necesario entender el re.sub()> método de re> Módulo (expresión regular) para comprender las soluciones dadas.

El re.sub()> El método realiza una búsqueda global y un reemplazo global en la cadena dada. Se utiliza para sustituir un patrón específico en la cadena. Hay en total 5 argumentos de esta función.

Sintaxis: re.sub(patrón, respuesta, cadena, recuento=0, banderas=0)

Parámetros:
patrón: el patrón que se va a buscar y sustituir
repl: la cadena con la que se va a reemplazar el patrón
cadena: el nombre de la variable en la que se almacena el patrón
recuento: número de caracteres hasta los cuales se realizará la sustitución
banderas: se utiliza para modificar el significado del patrón de expresiones regulares

count> y flags> son argumentos opcionales.

Ejemplo 1: sustitución de un patrón de texto específico
En este ejemplo, se buscará y sustituirá un patrón de texto determinado en una cadena. La idea es utilizar la forma muy normal de la re.sub()> método con solo los primeros 3 argumentos.

A continuación se muestra la implementación.




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

Producción:

 It is sunny outside. Thank you so so much. 

No importa cuántas veces esté presente el patrón requerido en la cadena, el re.sub()> La función los reemplaza todos con el patrón dado. Es por eso que ambos 'muy' se reemplazan por 'así' en el ejemplo anterior.

Ejemplo 2: sustituir un conjunto de caracteres por un carácter específico
La tarea consiste en reemplazar un conjunto de caracteres con un carácter determinado. Un conjunto de caracteres significa una variedad de caracteres. En el re.sub()> método se escribe un juego de caracteres dentro de [ ] (corchetes).

En este ejemplo, el juego de caracteres en minúscula, es decir, [a-z], será reemplazado por el dígito 0. A continuación se muestra la implementación.




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

Producción:

 22 A0000 00 0000000000 00 E0000 D00. 

Si es necesario sustituir el juego de caracteres en mayúsculas y minúsculas, entonces tenemos que introducir el juego de caracteres en mayúsculas de esta manera: [a-zA-Z] o el eficaz La forma de hacerlo es mediante el uso de banderas.

Ejemplo 3: sustitución sin distinción entre mayúsculas y minúsculas de un conjunto de caracteres por un carácter específico
En este ejemplo, tanto los caracteres en minúsculas como los mayúsculos serán reemplazados por el carácter dado. Con el uso de banderas , esta tarea se puede realizar muy fácilmente.

El re.I> bandera significa re. IGNORAR CASO . Al introducir esta bandera en el re.sub()> método y mencionando cualquier conjunto de caracteres, es decir, minúsculas o mayúsculas, la tarea se puede completar.

A continuación se muestra la implementación.




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

Producción:

 22 00000 00 0000000000 00 00000 000. 

Ejemplo 4: Realizar sustitución hasta un cierto número de caracteres
En este ejemplo, la sustitución se realizará hasta un número específico de caracteres y no en toda la cadena. Para realizar este tipo de sustitución el re.sub()> El método tiene un argumento. count> .

Al proporcionar un valor numérico a este argumento, se puede controlar el número de caracteres en los que se producirá la sustitución. A continuación se muestra la implementación.




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

Producción:

 000000 00ur Passion. 

Ejemplo 5: sustitución utilizando clases de caracteres abreviados y preprocesamiento de texto
El módulo Regex proporciona muchas clases de caracteres abreviados para aquellos conjuntos de caracteres que son muy comunes durante el preprocesamiento de texto. El uso de clases de caracteres taquigráficos da como resultado la escritura de código eficiente y reduce la necesidad de recordar el rango de cada conjunto de caracteres.

Para obtener una explicación detallada de la clase de caracteres taquigráficos y cómo escribir expresiones regulares en Python para el preprocesamiento de texto, haga clic aquí . A continuación se muestran algunas de las clases de caracteres taquigráficos más utilizadas:

w: coincide con caracteres alfanuméricos
W: coincide con caracteres no alfanuméricos como @, #, ', +, %, –
d: coincide con caracteres dígitos
s: coincide con caracteres de espacios en blanco

Significado de alguna sintaxis:
agregar un símbolo más (+) después de una clase o conjunto de caracteres: repetición de la clase o conjunto de caracteres anterior al menos 1 o más veces.

agregar un símbolo de asterisco (*) después de una clase o conjunto de caracteres: repetición de la clase o conjunto de caracteres anterior al menos 0 o más veces.

agregar un símbolo de intercalación (^) antes de una clase o conjunto de caracteres: la posición coincidente se determina para esa clase de caracteres o se establece al principio de la cadena.

agregar un símbolo de dólar ($) después de una clase o conjunto de caracteres: la posición coincidente se determina para esa clase de caracteres o se establece al final de la cadena.

Este ejemplo demuestra el uso de las clases de caracteres abreviados mencionadas para la sustitución y el preprocesamiento de texto para obtener cadenas limpias y sin errores. A continuación se muestra la implementación.




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

Producción:

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