zoukankan      html  css  js  c++  java
  • python正则二

    在python中,我们可以使用re模块来使用正则表达式。

    正则表达式使用对特殊字符进行转义,因为python本身也是用作为转义,所以在使用正则的时候会出现这样的情况,'python\.org',有两个斜杠,为了避免出现这种情况,我们可以使用如下方法:

    r'python.org'

    re模块一些常用的方法。

    findall

    以列表形式返回所有匹配的字符串,如果没有匹配的就返回一个空列表。

    还可以指定字符串的开始位置和结束位置。

    import re
    string = "abcd2135asdfasfd3425"
    re = re.compile(r'd+')
    result1 = re.findall(string)
    result2 = re.findall(string,0,8)  # 指定起始位置,从第一个字符到第八个字符,所以最后的数字不会匹配上
    print(result1)
    print(result2)
    
    结果: 
    ['2135', '3425']
    ['2135']

    search

    只要找到一个匹配结果就返回,也可以指定起始位置。

    import re
    string = "abcd2135asdfasfd3425"
    re = re.compile(r'd+')
    result1 = re.search(string)
    result2 = re.search(string,0,6)  # 指定起始位置,匹配从第1个字符到第6个字符中的数字
    print(result1.group())
    print(result2.group())
    
    结果:
    2135
    21

    match

    不指定起始位置,默认匹配字符串的头部。如果没有匹配上返回None。

    import re
    string = "abcd2135asdfasfd3425"
    re = re.compile(r'd+')
    result1 = re.match(string)
    result2 = re.match(string,2,6) # 从c开始匹配,又因为match是默认匹配字符串头部,而头部是c不是数字
    result3 = re.match(string,4,6) # 从2开始匹配
    print(result1)
    print(result2)
    print(result3.group())
    
    结果:
    None
    None
    21

    在线正则表达式匹配网站:https://regex101.com/ 我们可以在这里进行正则表达式的调试。

     

    如上图,首先我们选择python,其次把目标字符串放入TEST STRING下面,然后在REGULAR EXPRESSION处写正则表达式进行匹配,如果匹配上了,下面的匹配上的字符串会实时改变颜色。

    练习:

    匹配下面这个html里面的skuid和skuimgurl两部分内容。

    import re
    import requests
    
    url = "http://qwd.jd.com/fcgi-bin/qwd_searchitem_ex?skuid=26878432382%7C1658610413%7C26222795271%7C25168000024%7C11731514723%7C26348513019%7C20000220615%7C4813030%7C25965247088%7C5327182%7C19588651151%7C1780924%7C15495544751%7C10114188069%7C27036535156%7C10123099847%7C26016197600%7C10503200866%7C16675691362%7C15904713681"
    
    session = requests.session()
    r = session.get(url)
    html = r.text
    
    reg = re.compile(r""skuid":"(d+)",s+"S+s+"skuurl"S+s+"skuimgurl":"(S+)",")  # 这里是正则部分
    result = reg.findall(html)    # 因为我们要找到该网页中的所有的匹配的结果,所以用findall
    print(result)

    返回的结果如下:

    [('26878432382', 'https://img11.360buyimg.com/n7/jfs/t18226/169/1318243724/390477/5b0718ff/5ac44edcNa350dbd9.jpg'),
    ('5327182', 'https://img11.360buyimg.com/n7/jfs/t17461/138/1837663326/68820/5f8da5cd/5ad9b1e2N42bce837.jpg'),...........]

    上面的正则部分还可以写成如下格式:

    "skuid":"*(d+)"Ss+"w+":".*?"skuimgurl":"(.*?.jpg)

    在正则表达式中常用的元字符有如下:

        转义字符

    s  匹配空白字符

    S  匹配非空白字符

    w  匹配包括下划线的任何单词字符

    W 匹配非单词字符

    d 匹配数字

    |   代表左右表达式任意匹配一个

    ^ 匹配字符串开始

    $ 匹配字符串结尾

  • 相关阅读:
    Vue.js笔记
    WebPack笔记
    Js笔记(对象,构造函数,原型,原型链,继承)及一些不熟悉的语法
    JS在严格模式和非严格模式的区别
    原生js实现ajax与jquery的ajax库,及json
    原生js实现一个简单的轮播图
    HTML load事件和DOMCOntentLoaded事件
    HTML <script> 标签的 defer 和 async 属性
    网站favicon图标的显示问题
    python 取出aws中ip有,zabbix中没有的ip
  • 原文地址:https://www.cnblogs.com/yangjian319/p/8992554.html
Copyright © 2011-2022 走看看