notas de estudio Python --Day05

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:

  1. palabra bendición dada si la lógica de filtrado expresión regular (referido como "coincidente"):
  2. Sí, queremos obtener una parte específica de una cadena por una expresión regular.

Las expresiones regulares Características

  1. La flexibilidad, la lógica y la funcionalidad es muy fuerte;
  2. Puede llegar rápidamente a una cadena de caracteres de control muy complejo utilizando de manera sencilla.
  3. 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!

发布了26 篇原创文章 · 获赞 2 · 访问量 2344

Supongo que te gusta

Origin blog.csdn.net/qq_42909545/article/details/93843664
Recomendado
Clasificación