⊗pyPmREESCh 36 of 129 menu

Escapado de caracteres especiales en expresiones regulares de Python

Supongamos que necesitamos hacer que un carácter especial se represente a sí mismo. Para ello debe ser escapado usando la barra invertida. Veamos algunos ejemplos.

Ejemplo

En el siguiente ejemplo, el autor de la expresión regular quería que el patrón de búsqueda se viera así: letra 'a', luego un signo más '+', luego letra 'x'. Sin embargo, el autor del código no escapó el carácter '+' y por lo tanto el patrón de búsqueda en realidad se ve así: letra 'a' una o más veces, luego letra 'x':

txt = 'a+x ax aax aaax' res = re.sub('a+x', '!', txt) print(res)

Resultado de la ejecución del código:

'a+x ! ! !'

Ejemplo

Y ahora el autor escapó el signo más con la barra invertida. Ahora el patrón de búsqueda se ve como debería: letra 'a', luego signo más '+', luego letra 'x':

txt = 'a+x ax aax aaax' res = re.sub('a\+x', '!', txt) print(res)

Resultado de la ejecución del código:

'! ax aax aaax'

Ejemplo

En este ejemplo, el patrón se ve así: letra 'a', luego punto '.', luego letra 'x':

txt = 'a.x abx azx' res = re.sub('a\.x', '!', txt) print(res)

Resultado de la ejecución del código:

'! abx azx'

Ejemplo

En el siguiente ejemplo, el autor olvidó escapar el punto y bajo la expresión regular cayeron todas las subcadenas, ya que un punto sin escapar representa cualquier carácter:

txt = 'a.x abx azx' res = re.sub('a.x', '!', txt) print(res)

Resultado de la ejecución del código:

'! ! !'

Observación

Preste atención al hecho de que si olvida la barra invertida para el punto (cuando debe representarse a sí mismo) - esto puede incluso pasar desapercibido:

res = re.sub('a.x', '!', 'a.x') print(res) # devuelve '!', como queríamos

Visualmente funciona correctamente (ya que el punto representa cualquier carácter, incluyendo el punto ordinario '.'). Pero si cambiamos la cadena en la que se realizan los reemplazos - veremos nuestro error:

res = re.sub('a.x', '!', 'a.x abx azx') print(res) # devuelve '! ! !', pero se esperaba '! abx azx'

Lista de caracteres especiales y ordinarios

Si se escapa un carácter ordinario - no pasará nada malo - seguirá representándose a sí mismo. La excepción - los dígitos, no se pueden escapar.

A menudo surge la duda de si un carácter dado es especial. Algunos llegan a escapar todos los caracteres sospechosos seguidos. Sin embargo, esta es una mala práctica (ensucia la expresión regular con barras invertidas).

Son caracteres especiales: $ ^ . * + ? \ / {} [] () |

No son caracteres especiales: @ : , ' " - _ = < > % # ~ `& !

Tareas prácticas

Dada la cadena:

txt = 'a.a aba aea'

Escriba una expresión regular que encuentre la cadena 'a.a', sin capturar las demás.

Dada la cadena:

txt = '2+3 223 2223'

Escriba una expresión regular que encuentre la cadena '2+3', sin capturar las demás.

Dada la cadena:

txt = '23 2+3 2++3 2+++3 345 567'

Escriba una expresión regular que encuentre las cadenas '2+3', '2++3', '2+++3', sin capturar las demás (+ puede ser cualquier cantidad).

Dada la cadena:

txt = '23 2+3 2++3 2+++3 445 677'

Escriba una expresión regular que encuentre las cadenas '23', '2+3', '2++3', '2+++3', sin capturar las demás.

Dada la cadena:

txt = '*+ *q+ *qq+ *qqq+ *qqq qqq+'

Escriba una expresión regular que encuentre las cadenas '*q+', '*qq+', '*qqq+', sin capturar las demás.

Dada la cadena:

txt = '[abc] {abc} abc (abc) [abc]'

Escriba una expresión regular que encuentre las cadenas entre corchetes y las reemplace por '!'.

Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar