Las expresiones regulares se utilizan a menudo en el desarrollo de programas, tales como datos de autenticación (formato), cadena de caracteres de sustitución contenido y extraer el contenido por lo que se utiliza la situación, pero ahora muchos promotores para la expresión regular sólo en el conocimiento básico o voluntad con una etapa. Una vez que la situación (como rastreadores web) en grandes cantidades utilizando expresiones regulares encontradas se puede decir que, básicamente, perdió el equilibrio. En este artículo voy a tener que aprender sobre el uso de expresiones regulares de Python. Antes de leer este artículo usted necesita para dominar los conceptos básicos de Python, o tener un conocimiento básico de otros idiomas también se puede desarrollar, porque en el fondo cada idioma el uso de expresiones regulares en formas que son similares.
Cero, la base de expresiones regulares
- La extracción de caracteres (string)
A veces tenemos que conseguir una parte del contenido de una cadena, este contenido puede ser un personaje también puede ser una cadena, si no literalmente, a continuación, tiempo de recorrido de contraste, sino también propenso a errores. Bueno, esta vez podemos utilizar una expresión regular carácter concordante función. Las expresiones regulares proporcionan un método para hacer coincidir 4 caracteres para nosotros, de la siguiente manera:
gramática | explicación | ejemplo | partidos de cuerda |
---|---|---|---|
. | Cualquier carácter excepto una línea nueva "\ n" en | ab | ACB, ADB, A2B, a ~ b |
\ | Escapar, para transferir un personaje tras personaje para cambiar el significado original | a B C | abc, CA, un \ c |
[] | Coincide con cualquier carácter dentro de los corchetes | a B C D e F | abd, ACF, ADF, AEF |
[^] | Además de los caracteres dentro de los corchetes, los otros personajes coinciden | un [^ a, b, c, d, e] f | A1F, un # f, AZF, AGF |
- caracteres predefinidos
personajes llaman un carácter predefinido es una expresión regular para nuestra reserva específicamente diseñados para que coincida con el formato del contenido, como los números que coinciden con el \ d y la coincidencia espacio en blanco \ s , y así sucesivamente. Podemos igualar rápidamente el contenido de una cadena para cumplir con los requisitos de la utilización de caracteres predefinidos. contenido predefinido coincide con los personajes, el mismo también se puede utilizar en la forma anteriormente carácter hablada coincide con el partido, pero la cantidad de código es relativamente pequeña. Enumerado en la tabla es caracteres predefinidos:
gramática | explicación | ejemplo | partidos de cuerda |
---|---|---|---|
^ | Lo que comenzó con una cadena | ^ 123 | 123abc, 123321,123zxc |
PS | En lo extremo de la cuerda | 123 $ | abc123,321123, zxc123 |
\si | Coincida con un límite de palabra, no coincide con cualquier carácter | \ Basd \ b | asd |
\re | emparejar 0-9 | zx \ DC | zx1c, zx2c, zx5c |
\RE | Coincidencia no numérico | zx \ Dc | zxvc, ZX $ c, & c zx |
\ s | espacios en blanco del partido | zx \ sc | c zx |
\ S | Coincidencia de caracteres no está en blanco | zx \ Sc | zxac, zx1c, zxtc |
\ w | Coinciden con las letras, números y guiones bajos | zx \ c | zxdc, zx1c, zx_c |
\ W | No coinciden con las letras, números y guiones bajos | zx \ Wc | c zx zx zx $ c (c |
Hay personajes predefinidos siguientes puntos deben tenerse en cuenta:
- \ B concuerda con una sola posición, un lado de esta posición es un personaje que constituyen una palabra, al otro lado del inicio carácter no-palabra o al final de la cadena. \ B es el ancho cero.
- \ W emparejado gama de diferentes lenguajes de codificación no es lo mismo, el idioma coincide con el código ASCII es [a-zA-Z0-9_], y que coincide con el código de idioma Unicode es [a-zA -Z0-9_] y chinos caracteres, símbolos de ancho completo y otros caracteres especiales.
- Cantidad
en algunos casos es necesario para que coincida con el contenido duplicado, entonces podemos utilizar el número de definido el funcionamiento en modo. El número define la siguiente tabla:
gramática | explicación | ejemplo | partidos de cuerda |
---|---|---|---|
* | 0 veces para que coincida | zxc * | zx, zxccccc |
+ | 1 varias veces para que coincida | zxc + | zxc, zxccccc |
? | Partido 0 o 1 | zxc? | zxc, ZX |
{metro} | hora de los partidos m | zxc {3}, etc. | zxcccvb |
{metro,} | Partido m o más veces | zxc {3}, etc. | zxcccvb, zxccccccccvb |
{,norte} | Partido 0 a n veces | zxc {3}, etc. | zxvb, zxcvb, zxccvb, zxcccvb |
{Minnesota} | Matched a n veces m veces | {1,3} zxc | zxcvb, zxccvb, zxcccvb |
- Aserción
afirmación, también conocido como afirmación de anchura cero, en referencia a la expresión afirmación cuando el partido fue cuando cierto, pero no coincide con el contenido de la expresión afirmación. Y al final es el principio, $ representantes ^, \ b representa el límite de palabra como iniciales y finales afirmación afirmación tiene un efecto similar, que coinciden sólo ciertos lugares en el proceso de correspondencia, no tome el personaje, llamado de anchura cero. La ubicación llamada se refiere a la izquierda del primer carácter de la cadena, el medio y los caracteres adyacentes derecha del último carácter. Hay cuatro expresión afirmación de anchura cero:
- crítica negativa de anchura cero después de que la afirmación (? <! Exp), que coincide con una posición detrás de la afirmación no se sostiene cuando la expresión no coincide con el establecimiento. Por ejemplo, \ w + \ d, cadena coincidente zxc no termina (<zxc?);
- Recordando la primera anchura cero afirmación negativa (?! Exp), la expresión coincide con la posición de la afirmación anterior, que no coincida con el establecimiento. Por ejemplo: \ d \ w +, emparejar la secuencia de caracteres no se inicia con zxc; (zxc ?!)
- (? = Exp) primera afirmación, la afirmación es verdadera posición coincidente en frente de la afirmación, por ejemplo, para que coincida persecución "una expresión regular" esta cadena en la re regular, podemos escribir Re (= gular?);
- Pelo después de la afirmación (? <= Exp), la afirmación es verdadera posición partido a la afirmación, por ejemplo, "EGEX representa la expresión regular" cadena con el fin de que coincida con la expresión regular y la adición regular re, puede utilizar re (?! G ) esta expresión define la ubicación de la re bien, esto no es una posición detrás del personaje g. Pre y post-diferencia del pelo es que la posición del carácter después del partido si la expresión entre paréntesis.
- La codicia / no expansivo
expresión regular coincidirá tanto como sea posible al personaje, que se llama codicioso, codicioso patrón de expresión regular es el modo por defecto. Pero a veces nos dan codiciosos causar sufrimiento innecesario, por ejemplo, queremos que coincida con la cadena "Jack123Chen123Chen" en "Jack123Chen", pero fuera de la codicia es la coincidencia de patrones "Jack123Chen123Chen", entonces tenemos que utilizar no expansivo el modo de resolver este problema, el modo de no expansivo utilizado comúnmente expresión es la siguiente:
gramática | explicación |
---|---|
*? | Coincida con 0 o más, pero menos duplicación siempre que sea posible |
+? | Coincidir con 1 o más veces, pero siempre que sea posible una menor duplicación |
?? | Coincida con 0 ó 1, pero menos duplicación siempre que sea posible |
{metro,}? | Partidos m o más veces, pero menos duplicación siempre que sea posible |
{Minnesota}? | Coinciden m veces o n veces, tanto como sea posible, pero menos de repetición |
- Otros
contenidos en sus expresiones regulares se utilizan comúnmente, Echemos un vistazo a no acostumbrarse, pero la misma sintaxis de gran alcance.
- O a juego, también conocida como la rama correspondiente, esa rama, siempre y cuando hay un partido igualado y o frases que utilizamos en el desarrollo de similares. O el uso coincidente | rama dividida, por ejemplo, tenemos que coincidir con el nombre en Inglés, pero en Inglés segundo nombre y el apellido es posible · división, puede haber un espacio delimitado, entonces podemos utilizar el quirófano coincidir para hacer frente a este problema. Formato es el siguiente: [A-Za-z] + · [A-Za-z] + | [A-Za-z] + \ s [A-Za-z] +
- Combinación, varios elementos se combinan en una sola unidad, que pueden * + |? A ser modificados y otros símbolos, y las cuerdas, y esta combinación puede recordar que espera combinar para proporcionar referencias de uso. Uso de paquetes () de la figura. Como la fecha de acceso expresión regular podría escribir: \ d {4} - (0 [1-9] | 1 [0-2]) - (0 [1-9] | [12] [0-9] | 3 [01]). El primer paquete (0 [1-9] | 1 [0-2]) es el mes de partido regular, el segundo paquete (0 [1-9] | [12] [0-9] | 3 [01] ) representa el día del partido regular.
A, Python usando expresiones regulares
Utilizar expresiones regulares en Python es muy simple, Re módulo nos proporciona soporte para expresiones regulares. Un total de tres pasos utilizando los pasos:
- La conversión de la normal expresión de cadena Patrón ejemplo;
- Uso patrón de ejemplo caracteres que se ajustará con el procesamiento, el resultado de la casación es un ajuste de ejemplo;
- Coincidir para llevar a cabo la operación con los siguientes ejemplos.
En Python, se utilizó el método de re Hay seis, a saber: la compilación , partido , Buscar , findAll , Dividir y Sub , la siguiente explicación para esto sería de alrededor de seis métodos.
- compilación
papel es el de los métodos de compilación cadena de expresión regular en ejemplo del patrón, dos parámetros que tienen un patrón y las banderas , el tipo de cadena de patrón es el tipo de parámetro, que recibe la cadena de expresión regular, tipo banderas es un int, un recibido es el número de coincidencia de patrones, parámetros banderas no requeridas, el valor predeterminado es 0 (ignoran). banderas perfil de compatibilidad 6 tiene la siguiente:
el modo de ajuste | explicación |
---|---|
re.I | ignorar mayúsculas |
movimiento rápido del ojo | el modo de juego de varias líneas |
re.S | Cualquier modo de partido |
re.L | patrones que coinciden con caracteres predefinidos |
re.U | La definición de un personajes coincidencia de patrones |
Rvdo | El modo detallado |
El modo de seis rara vez se utiliza en el desarrollo real, sólo necesitamos saber puede ser. Uso de compilación muy simple, de la siguiente manera:
import re
pattern = re.compile(r'\d')
- coincida con
la acción utilizando partido Patrón ejemplo, empezar desde el lado izquierdo para que coincida con la cadena si un partido para devolver una instancia del partido, si no hay ninguna coincidencia de retorno Ninguno.
import re
def getMatch(message):
pattern = re.compile(r'(\d{4}[-年])(\d{2}[-月])(\d{2}日{0,1})')
match = re.match(pattern, message)
if match:
print(match.groups())
for item in match.groups():
print(item)
else:
print("没匹配上")
if __name__ == '__main__':
message = "2019年01月23日大会开始"
getMatch(message)
message = "会议于2019-01-23召开"
getMatch(message)
Utilizamos los códigos de grupos del método, este método se utiliza para obtener coincidencia de cadenas a cabo. Después de un tiempo aquí, hay muchos lectores se preguntaron por qué la primera pieza de contenido puede igualar hasta la fecha, y la segunda pieza de contenido no pueden hacer? Esto se debe a que el partido está emparejando método de la posición de inicio de la cadena. FIG resultados código de servicio:
- search
search 方法与 match 方法功能是一样的,只不过 search 方法是对整个字符串进行匹配。将前一小节代码中的 getMatch 方法进行改动,即可将第二段内容中的年月日匹配出来。
import re
def getMatch(message):
pattern = re.compile(r'(\d{4}[-年])(\d{2}[-月])(\d{2}日{0,1})')
match = re.search(pattern, message)
if match:
print(match.groups())
for item in match.groups():
print(item)
else:
print("没匹配上")
if __name__ == '__main__':
message = "2019年01月23日大会开始"
getMatch(message)
message = "会议于2019-01-23召开"
getMatch(message)
上述代码运行结果如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VmTrXNxa-1575984679614)(https://s2.ax1x.com/2019/12/03/QQ8fR1.png)]
4. findall
findall 方法的作用是匹配整个字符串,以列表的形式返回所有匹配结果。
import re
def getMatch(message):
pattern = re.compile(r'\w+')
match = re.findall(pattern, message)
if match:
print(match)
else:
print("没匹配上")
if __name__ == '__main__':
message = "my name is 张三"
getMatch(message)
message = "张三 is me"
getMatch(message)
代码运行结果如下图:
5. split
split 方法是利用指定的字符来分割字符串。
import re
def getMatch(message):
pattern = re.compile(r'-')
match = re.split(pattern, message)
if match:
print(match)
else:
print("没匹配上")
if __name__ == '__main__':
message = "2018-9-12"
getMatch(message)
message = "第一步-第二步-第三步-第四步-and more"
getMatch(message)
上述代码运行结果如下图:
6. sub
sub 方法用来替换字符串,它接受5个参数,其中常用的有三个:
- pattern,Pattern 实例
- string,等待替换的字符串
- repl,表示替换的新字符串或需要执行的替换方法
- count,替换次数,默认为0表示全部替换
import re
def getMatch(match):
return match.group(0).replace(r'年龄', 'age')
if __name__ == '__main__':
message = "your 年龄 ?"
pattern=re.compile(r'\w+')
print(re.sub(pattern,getMatch,message))
代码运行结果如下图:
三、总结
Python 中正则表达式使用起来非常方便,上面所展示的代码,完全可以直接复制出来稍加修改后放在项目中使用。内容不多,主要是讲解代码怎么使用,希望大家完全理解掌握了正则表达式的写法。