zoukankan      html  css  js  c++  java
  • python学习笔记 day19 正则表达式(三)

    匹配标签:

    import re
    ret=re.search('<(?P<tag_name>w+)>w+</(?P=tag_name)>','<h1>hello</h1>')    #后面的待匹配字符写成<h1>hello</h2>都匹配不了,因为后面的</(?P=tag_name)>已经设置为跟前面的标签名一样啦
    print(ret.group())
    print(ret.group('tag_name'))  #因为刚才在<(?P<tag_name>w+)> 已经给<h1>这个标签命名为tag_name了 并且使用()把这个标签进行分组了,所以可以使用group('name')的形式取出该分组中的内容
    print(ret.group(1))   #因为前面的标签已经使用(?P<tag_name>w+)进行分组了 ,所以可以使用ret.group(1)取出第一个分组中的内容

    运行结果:

    其实我现在就是目标是后面待匹配的字符串,练习一下前面怎么写正则规则;

    可以在分组中使用?<name>的形式给分组起名字;

    获取的结果可以直接使用group('对应的名字')取出分组中的内容;

    然后还可以使用另一种方法:

    import re
    ret=re.search(r'<(w+)>w+</1>','<h1>hello</h1>')
    print(ret.group())
    print(ret.group(1))

    我们如果不给组起名字,也可以使用序号来找到对应的组,表示要找的内容和前面的组内容一致;

    读取的匹配结果可以直接使用group(序号)拿到相应的值

    运行结果:

    匹配整数

    import re
    ret=re.findall('-?d+.d+|(-?d+)','-23*34.25+78-23.12+23-89')
    ret.remove('')  #之所以有空格是因为 findall()中正则规则中如果有分组会优先显示,但是小数部分在匹配|后面的整数时是匹配不上的,就会返回一个‘’
    ret.remove('')
    print(ret)

    这里用到了findall()在匹配字符串时,如果前面的正则规则是包含分组,则会优先匹配分组中的内容,之所以还会写前面那个匹配小数的就是因为如果只写或|或后面的 那么结果就会包含小数的整数部分,这显然是不合理的~

    运行结果:

    数字匹配

    0. 比如需要匹配一个表达式中的所有数字:

    import re
    ret=re.findall(r'-?d+.d+|-?d+','1-2*(60+(-40.35/5)-(-4*3))')
    print(ret)

    运行结果:

    因为这里需要匹配所有的数字,包括整数和小数,所以中间需要使用| 但是|有一个特点,前面匹配好了后面就不再继续匹配了,所以需要把长的放前面,也就是匹配小数的那部分

    注意:. 是匹配小数点,而且这里还不能加分组,因为findall()会优先匹配分组中的内容,当然我们也可以在分组前面加上?:取消分组优先

    import re
    ret=re.findall(r'(?:-?d+.d+)|-?d+','1-2*(60+(-40.35/5)-(-4*3))')
    print(ret)

    运行结果:

    1. 匹配一段文本中每行的邮箱: http://blog.csdn.net/make164492212/article/details/51656638

    import re
    ret=re.search(r'w+://w+.w+.w+/w+/w+/w+/w+','http://blog.csdn.net/make164492212/article/details/51656638')
    print(ret.group())

    运行结果:

     2. 匹配一行文本中每行的时间字符串,比如:1990-07-15(有一点问题有待解决,,,,)

    import re
    ret=re.search('[1-2]d{3}-[0]d-[0-2]d|([30,31])','1990-07-15')
    print(ret.group())

    其实这个写的有问题,就是中间的月份我不知道怎么分开匹配,用|或的话后面的时间就匹配不上啦,,,

    运行结果:

     3. 匹配QQ号(从10000开始)

    import re
    ret=re.search('[1-9][]0-9]{4,}','2398409012023')
    print(ret.group())

    运行结果:

    4. 匹配浮点数

    import re
    ret=re.search('d+.d+','45.56')
    print(ret.group())

    运行结果:

    5. Eva-J博客上的爬虫我没看太懂,,,,

    6.作业题---实现一个计算器(使用正则表达式)

    实现能计算类似 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式的计算器程序

     待完善。。。

    talk is cheap,show me the code
  • 相关阅读:
    Qt 3d
    yolov5 检测图片里面的对象
    QTreeWidget双击事件
    Qt QPainter QBrush 填充区域
    Qt QWidget保存为图片
    [原][减肥][名词解释]什么是GI
    [原][减肥]生酮减肥,喝防弹咖啡减肥的食谱
    [转][减肥]外源性酮症与内源性生酮
    fastadmin 单独设置导入权限【转载】
    [MySQL]多表关联查询技巧
  • 原文地址:https://www.cnblogs.com/xuanxuanlove/p/9630494.html
Copyright © 2011-2022 走看看