zoukankan      html  css  js  c++  java
  • 【Python3 爬虫】U19_正则表达式之re模块其他函数

    re模块有以下这些函数:

    • compile用于编译正则表达式,生成一个Pattern对象
    • match方法:从开始位置开始查找,一次匹配
    • search方法:从任何位置开始查找,一次匹配
    • findall方法:全部匹配,返回列表
    • finditer方法:全部匹配,返回跌代器
    • split方法: 分割字符串,返回列表
    • sub方法:替换

    使用re模块的步骤

    a. 使用 compile() 函数将正则表达式的字符串形式编译为一个 Pattern 对象
    b. 通过 Pattern 对象提供的一系列方法对文本进行匹配查找,获得匹配结果,一个 Match 对象。
    c. 最后使用 Match 对象提供的属性和方法获得信息,根据需要进行其他的操作

    1.compile方法

    对于一些经常要用到的正则表达式,可以使用complie进行编译,然后在使用的时候可以直接拿过来用,执行效率会更快。而且compile还可指定flag=re.VERBOSE,在写正则表达式的时候做好注释,案例如下:

    import re
    text = 'the price is 19.5'
    pat = re.compile(r"""
                    d+ # 小数点前面的数字
                    .? # 小数点
                    d+ # 小数点后面的数字
                    """,re.VERBOSE)
    ret = re.search(pat,text)
    print(ret.group())
    
    

    打印结果:19.5

    2.findall方法

    findall可以获取所有的匹配结果并且返回一个列表,案例如下:

    import re
    text = "Apple's price is $19,Orange's price is $20"
    ret = re.findall('$d+',text)
    print(ret)
    

    打印结果:['$19', '$20']

    3.finditer方法

    finditer 方法的行为跟 findall 的行为类似,也是搜索整个字符串,获得所有匹配的结果。但它返回一个顺序访问每一个匹配结果(Match 对象)的迭代器。

    import re
    text = "Apple's price is $19,Orange's price is $20"
    
    rets = re.finditer('$d+',text)
    for ret in rets:
        print(ret.group())
    

    打印结果:
    $19
    $20

    4.split方法

    split 方法按照能够匹配的子串将字符串分割后返回列表,实战案例如下:

    import re
    text = "hello china ni hao"
    ret = re.split('[^a-zA-z]',text)
    print(ret)
    

    打印结果:['hello', 'china', 'ni', 'hao']

    5.sub方法

    sub方法用来替换字符串,将匹配到的字符串替换为其他字符串。

    import re
    text = "Apple's price is $19,Orange's price is $20"
    ret = re.sub('$d+','0',text)
    print(ret)
    

    6.实战案例:去掉标签<>取内容

    import re
    text = "<li title='as'>ISBN:12334</li>"
    ret = re.sub('<.+?>',"",text).replace("ISBN:","")
    print(ret)
    
    

    输出结果:12334

    上述代码也可以指定替换标签的数量,例如:只想替换第一个标签

    import re
    text = "<li title='as'>ISBN:12334</li>"
    ret = re.sub('<.+?>',"@@@",text,1)
    print(ret)
    

    打印结果:@@@ISBN:12334

  • 从上述例子可以看到可以通过指定替换的数量根据自己需要进行替换

查看全文
  • 相关阅读:
    CRF相关论文 按时间序
    python自学记录 pydev安装
    Dell无线网卡驱动安装 linux
    WPF DataGrid自动生成行号
    WPF Tips
    Links
    Prototype的Class.create解析
    Javascript中的this绑定
    Javascript的命名空间库namespace.js
    【转】一个优秀的Javascript框架--Prototype解说
  • 原文地址:https://www.cnblogs.com/OliverQin/p/12619729.html
  • Copyright © 2011-2022 走看看