directorio
notas de estudio Python --Day05
El quinto día, hablando de realmente un poco difícil, ya que las necesidades de contenido para recordar un poco más.
pitón expresión regular
Primer vistazo a lo que es una expresión regular, después de la Enciclopedia de Baidu. Las expresiones regulares también conocidos como expresiones regulares, (expresión regular, código, abreviado como expresiones regulares, expresión regular o RE), un concepto de la informática. Se utiliza comúnmente para recuperar, reemplazar el texto en línea con los de un modelo (regla) es.
concepto de expresiones regulares
Una expresión regular es una fórmula lógica de operaciones de cadena, es el uso de una combinación de un caracteres particulares predefinidas, y éstas carácter particular, forman una "regla de cadena", esta "cadena regla" se utiliza para expresar caracteres para la lógica de filtro de cadena.
propósito de expresiones regulares
Dada una expresión regular y otra cadena, podemos lograr los siguientes objetivos:
- palabra bendición dada si la lógica de filtrado expresión regular (referido como "coincidente"):
- Sí, queremos obtener una parte específica de una cadena por una expresión regular.
Las expresiones regulares Características
- La flexibilidad, la lógica y la funcionalidad es muy fuerte;
- Puede llegar rápidamente a una cadena de caracteres de control muy complejo utilizando de manera sencilla.
- Para las personas que son nuevos, relativamente oscuro.
símbolos iguales regulares
símbolo | explicación | Ejemplos | explicación |
---|---|---|---|
. | Coincide con cualquier carácter | bt | bate de partido / sino / b # t / B1T etc. |
\ w | letra del fósforo / número / subrayado | b \ en peso | bate de partido / B1T / B_T similares pero no puede coincidir con b # t |
\ s | Coincidir con los caracteres en blanco (incluyendo \ r \ n, \ t, etc.) | te ama | Partido te amo |
\re | números que coinciden | \ D \ d | 23/01/99 coincidir etc. |
\si | Coincidencia de los límites de palabra | \ B El \ b | |
^ | Coincide con el comienzo de la cadena | El ^ | El partido inicial de la cadena |
PS | El final del partido la cadena | $ .exe | Puede coincidir con las cadenas que terminan en .exe |
\ W | No coincidentes letra / número / subrayado | b \ Peso | Partido b # t / b @ t como , pero que no coincide, pero / B1T / B_T etc. |
\ S | Coincidencia de caracteres no está en blanco | te ama | Amor # que puede igualar y así sucesivamente , pero no puede compararse con el amor que |
\RE | Coincidencia no numérico | \ D \ D | Partido 9a / 3 # / 0F, etc. |
\SI | Coincidencia de límite de palabra | \ Bio \ B | |
[] | Cualquier carácter del conjunto de caracteres | [Aeiou] | Coincide con cualquier carácter de una vocal |
[^] | Coincide con cualquier carácter individual no en el conjunto de caracteres | [^ Aeiou] | Coincide con cualquiera de los caracteres que no sean vocales |
* | Coincida con 0 o más veces | \ W * | |
+ | Coincidir con 1 o más veces | \ W + | |
? | Partido 0 o 1 | \ W? | |
{NORTE} | Partido N veces | \ W {3} | |
{METRO,} | Coincidir a veces menos M | \ W {3,} | |
{MINNESOTA} | Coincidencia de al menos N veces en la mayoría de M veces | \ W {3,6} | |
| | rama | foo | bar | Puede coincidir con foo o la barra |
(? #) | nota | ||
(Exp) | Exp y que coincide con el grupo llamado automáticamente capturado | ||
(? <Nombre> exp) | partido del grupo exp y capturar el nombre designado en | ||
(?:Exp) | Exp coincidir pero no captura el texto partido | ||
(? = Exp) | Coincidencia de la posición en frente de exp | \ B \ w + (? = Ing) | Estoy bailando puede coincidir con el danc |
(? <= Exp) | posición detrás exp juego | (? <= \ Bdanc) \ w + \ b | Pareja I baile del amor y la lectura de la primera ING |
(?!Exp) | Exp no coincidir con la posición de la parte trasera | ||
(? <! Exp) | Exp no coincidir con la posición en frente de | ||
*? | Repite cualquier número de veces, pero menos duplicación siempre que sea posible | a. * b . *? b |
La expresión regular aabab aplicada, la antigua coincidirá con todo el aabab cadena, que coincidirá con el dos cuerdas AB y aab |
+? | uno repetidas veces o más, pero menos duplicación siempre que sea posible | ||
?? | Repita 0 ó 1, pero menos duplicación siempre que sea posible | ||
{MINNESOTA}? | Repetido N veces a M, pero menos repetida como | ||
{METRO,}? | Repetida M veces o más, pero siempre que sea posible una menor duplicación |
soporte para Python expresiones regulares
re módulo para operar expresión regular, como una función del núcleo
función | explicación |
---|---|
de compilación (patrón, flags = 0) | La compilación de una expresión regular devuelve el objeto de expresión regular |
partido (patrón, cuerdas, banderas = 0) | coincidente retorno exitoso objetos utilizando cadena de expresión regular de otra manera coincidente Ninguno |
search(pattern, string, flags=0) | 搜索字符串中第一次出现正则表达式的模式 成功返回匹配对象 否则返回None |
split(pattern, string, maxsplit=0, flags=0) | 用正则表达式指定的模式分隔符拆分字符串 返回列表 |
sub(pattern, repl, string, count=0, flags=0) | 用指定的字符串替换原字符串中与正则表达式匹配的模式 可以用count指定替换的次数 |
fullmatch(pattern, string, flags=0) | match函数的完全匹配(从字符串开头到结尾)版本 |
findall(pattern, string, flags=0) | 查找字符串所有与正则表达式匹配的模式 返回字符串的列表 |
finditer(pattern, string, flags=0) | 查找字符串所有与正则表达式匹配的模式 返回一个迭代器 |
purge() | 清除隐式编译的正则表达式的缓存 |
re.I / re.IGNORECASE | 忽略大小写匹配标记 |
re.M / re.MULTILINE | 多行匹配标记 |
练习
练习一:匹配正确的电话号码
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:验证输入的手机号码
import re
def main():
# 验证手机号码
# 移动号码段: 139、138、137、136、135、134、150、151、152、157、158、159、182、183、187、188、147
# 联通号码段: 130、131、132、136、185、186、145
# 电信号码段: 133、153、180、189
tel = input("请输入你的电话号码:")
if tel.isdigit():
m1 = re.match(r'(13[0-9])|(14[5|7])|(15[0-3]|[7-9])|(18[023]|[5-9])/d{8}$', tel)
if not m1:
print("请输入正确的手机号")
else:
print("您的手机号为%s" % tel)
if __name__ == "__main__":
main()
练习二:替换指定内容到行尾
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:正则表达式替换,从文件中读取文本,进行替换,abc后面的替换为' def'
import re
def main():
try:
with open('text.txt', 'r', encoding='utf-8') as file:
with open('text_update.txt', 'a', encoding='utf-8') as file1:
for line in file.readlines():
file1.write(re.sub(r'abc.*', 'abc def', line))
except FileNotFoundError:
print("未找到文件")
except LookupError:
print("指定了未知的编码")
except UnicodeDecodeError:
print("解码错误")
if __name__ == "__main__":
main()
text.txt
abc 123123
asd abcdea
sdfas
abcsdf1_
text_update.txt
abc def
asd abc def
sdfas
abc def
练习三:数字替换
#!usr/bin/python
# -*- coding: utf-8 -*-
# author: 李爽
# description:数字替换
# 把asdadas123asdasdas456asdasdasd789asdasd替换为:
# asdadas[123]asdasdas[456]asdasdasd[789]asdasd
import re
def main():
source_str = 'asdadas123asdasdas456asdasdasd789asdasd'
select_strs = re.findall(r'([0-9]*[0-9])', source_str)
replace_str = source_str
for select_str in select_strs:
replace_str = re.sub(select_str, '['+select_str+']', replace_str, 1)
print(replace_str)
if __name__ == "__main__":
main()
写爬虫类应用的是否,正则表达式可以大展身手,我们可以循序的从网页代码中发现我们指定的模式并提取出我们需要的信息。
结语
第五天,因为有些事情只能写这么多了。明天继续吧。
如果你发现我的文章哪里有错误或者有什么好的想法可以联系我,我们一起学习共同进步,我的邮箱地址是[email protected]
let’s do more of those!