escapando en expresiones regulares

Las secuencias de escape generalmente cumplen dos funciones. La primera función es codificar datos especiales que no pueden representarse directamente mediante el alfabeto. La segunda función se utiliza para representar caracteres que no se pueden ingresar directamente con el teclado (como el retorno de carro).

En el lenguaje C, el carácter de barra invertida "\" se utiliza como carácter de escape para representar los caracteres de control ASCII no imprimibles. Además, en el protocolo URI, algunos símbolos en la cadena de solicitud tienen significados especiales y deben escaparse. El carácter de escape es el signo de porcentaje "%". La razón por la que este carácter se llama carácter de escape es porque el carácter detrás de él no tiene el significado original.

A continuación se muestran algunos caracteres de escape comunes y su significado.

 Las expresiones regulares también se escapan con barras invertidas. En términos generales, \d en la expresión regular representa un solo número, pero si queremos expresarlo como una barra invertida y la letra d, debemos escaparlo en este momento y escribirlo como \\d, lo que significa que la barra invertida va seguida de una letra d.

La barra invertida y d de ahora son dos caracteres que aparecen consecutivamente. Si desea expresarlo como una barra invertida o d, puede usar el símbolo de barra vertical o corchetes para lograrlo, como \|d o [\d].

El proceso específico para expresar correctamente "barra invertida" en expresiones regulares es el siguiente: la cadena que ingresamos, cuatro barras invertidas \\, después del primer paso de escape de la cadena, significa dos barras invertidas \; estas dos barras invertidas se escapan en el segundo paso de regularización y puede representar una única barra invertida \.

 Si ahora queremos encontrar funciones como asterisco (*), signo más (+), signo de interrogación (?) en lugar de metacaracteres, entonces debemos escapar de ellos, simplemente agregue una barra invertida delante de ellos, OK.

Los corchetes [] y las llaves {} solo necesitan escapar del corchete de apertura en expresiones regulares, pero los paréntesis () deben tener escape. En expresiones regulares, los paréntesis generalmente se usan para agrupar o tratar una parte como un todo. Si solo escapa de los corchetes de apertura o cierre, la expresión regular pensará que falta la otra mitad, por lo que se informará un error.

Hay tres situaciones de las que hay que escapar en el grupo de personajes.

1. El signo de intercalación está entre corchetes y debe tener carácter de escape en la primera posición:

>>> import re
>>> re.findall(r'[^ab]', '^ab')  # 转义前代表"非"
['^']
>>> re.findall(r'[\^ab]', '^ab')  # 转义后代表普通字符
['^', 'a', 'b']

2. Los guiones están entre corchetes y no al principio ni al final.

>>> import re
>>> re.findall(r'[a-c]', 'abc-')  # 中划线在中间,代表"范围"
['a', 'b', 'c']
>>> re.findall(r'[a\-c]', 'abc-')  # 中划线在中间,转义后的
['a', 'c', '-']
>>> re.findall(r'[-ac]', 'abc-')  # 在开头,不需要转义
['a', 'c', '-']
>>> re.findall(r'[ac-]', 'abc-')  # 在结尾,不需要转义
['a', 'c', '-']

3. El paréntesis derecho está entre corchetes y no en primer lugar:

>>> import re
>>> re.findall(r'[]ab]', ']ab')  # 右括号不转义,在首位
[']', 'a', 'b']
>>> re.findall(r'[a]b]', ']ab')  # 右括号不转义,不在首位
[]  # 匹配不上,因为含义是 a后面跟上b]
>>> re.findall(r'[a\]b]', ']ab')  # 转义后代表普通字符
[']', 'a', 'b']

En términos generales, si queremos expresar metacaracteres (.*+?() y similares) como su significado literal, debemos escapar de ellos, pero si aparecen entre paréntesis en el grupo de caracteres, no se pueden escapar. En este caso, generalmente es un metacarácter de longitud única, como punto (.), asterisco (*), signo más (+), signo de interrogación (?), paréntesis izquierdo y derecho, etc. Todos ellos ya no tienen un significado especial, sino que representan al personaje mismo. Pero si símbolos como \d o \w aparecen entre corchetes, siguen siendo el significado de los propios metacaracteres.

>>> import re
>>> re.findall(r'[.*+?()]', '[.*+?()]')  # 单个长度的元字符 
['.', '*', '+', '?', '(', ')']
>>> re.findall(r'[\d]', 'd12\\')  # \w,\d等在中括号中还是元字符的功能
['1', '2']  # 匹配上了数字,而不是反斜杠\和字母d

 Este artículo son las notas de estudio del día 23 de agosto. El contenido proviene del "Curso de introducción a las expresiones regulares" de Geek Time . Se recomienda este curso.

Supongo que te gusta

Origin blog.csdn.net/key_3_feng/article/details/132462417
Recomendado
Clasificación