• Python正则表达式(一看就懂)


    目录

    哈喽O(∩_∩)O??

    什么是正则表达式(⊙_⊙)

    简单说,正则表达式是…

    正则表达式怎么用?

    sreach的用法??

    匹配连续的多个数值??

    ?字符"+"重复前面一个匹配字符一次或者多次??

    字符"*"重复前面一个匹配字符零次或者多次??

    字符"?"重复前面一个匹配字符零次或者一次??

    特殊字符使用反斜杠"“引导,例如” “、” “、” “、”"分别表示回车、换行、制表符号与反斜线自己本身

    ?

    ?完整表??

    ?match用法??

    match用法??

    ?match对象??

    数量词??

    匹配开头、结尾??

    ?

    ?匹配分组??

    match总结??

    实践出真知 凸(`0′)凸 ??

    写在最后??


    哈喽O(∩_∩)O??

    今天来发一下python正则表达式,其实这个也是比较简单的

    肝了好几个小时才写出来呀

    什么是正则表达式(⊙_⊙)

    目前越来越多的网站、编辑器、编程语言都已支持一种叫“正则表达式”的字符串查找“公式”,有过编程经验的同学都应该了解正则表达式(Regular Expression 简写regex)是什么东西,它是一种字符串匹配的模式(pattern),更像是一种逻辑公式。

    简单说,正则表达式是…

    python中必备的工具,主要是用来查找和匹配字符串的。

    正则表达式尤其在python爬虫上用的多。

    正则表达式怎么用

    首先,我们要导入头文件(写c++写习惯了)模块

    import re
    
    • 1

    因为re是内置模块,所以不需要额外安装,就很银杏

    sreach的用法??

    匹配连续的多个数值??

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWVJfVA==,size_20,color_FFFFFF,t_70,g_se,x_16

    import re
    
    r=r"d+"
    m=re.search(r,"YRYR567eruwgf")#目标是567
    print(m)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    re模块中,r“d+”正则表达式表示匹配连续的多个数值,search是re中的函数,从"YRYR567eruwgf"字符串中搜索连续的数值,得到"567"

    结果:

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWVJfVA==,size_20,color_FFFFFF,t_70,g_se,x_16

    可以看到,搜索到了连续值“567”

    字符"+"重复前面一个匹配字符一次或者多次??

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWVJfVA==,size_20,color_FFFFFF,t_70,g_se,x_16

    import re
    
    r=r"bd+"
    m=re.search(r,"a12b1233cd")
    print(m)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    这样,结果就是b后面的连续数字

    结果:

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWVJfVA==,size_20,color_FFFFFF,t_70,g_se,x_16

    字符"*"重复前面一个匹配字符零次或者多次??

    “*" 与 "+"类似,但有区别,列如:
    可见 r"ab+“匹配的是"ab”,但是r"ab
    “匹配的是"a”,因为表示"b"可以重复零次,但是”+“却要求"b"重复一次以上

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWVJfVA==,size_19,color_FFFFFF,t_70,g_se,x_16

    import re
    
    r=r"ab+"
    m=re.search(r,"acabc")
    print(m)
    
    r=r"ab*"
    m=re.search(r,"acabc")
    print(m)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    结果:

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWVJfVA==,size_20,color_FFFFFF,t_70,g_se,x_16

    字符""重复前面一个匹配字符零次或者一次??

    匹配结果"ab”,重复b一次

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWVJfVA==,size_20,color_FFFFFF,t_70,g_se,x_16

    import re
    
    r=r"ab?"
    m=re.search(r,"abbcabc")
    print(m)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    结果:

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWVJfVA==,size_20,color_FFFFFF,t_70,g_se,x_16

    特殊字符使用反斜杠"“引导,例如” “、” “、” “、”"分别表示回车、换行、制表符号与反斜线自己本身

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWVJfVA==,size_20,color_FFFFFF,t_70,g_se,x_16

    import re
    
    r=r"a
    b"
    m=re.search(r,"ca
    bcaba")
    print(m)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果:

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWVJfVA==,size_20,color_FFFFFF,t_70,g_se,x_16

    完整表??

    其实上面说这些都是比较基础,比较简单的,还有复杂一点的,都在这张表里

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWVJfVA==,size_20,color_FFFFFF,t_70,g_se,x_16

    match用法??

    match用法??

    语法:re.match(pattern, string[, flags])

    从首字母开始开始匹配,string如果包含pattern子串,则匹配成功,返回Match对象,失败则返回None,若要完全匹配,pattern要以$结尾。

    #示例:
    name='张三'
    if re.match('张w+',name):
        print('{},你好!'.format(name))
        # 张三,你好!
    
    • 1
    • 2
    • 3
    • 4
    • 5

    输出结果:张三,你好

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWVJfVA==,size_10,color_FFFFFF,t_70,g_se,x_16

    张三:谁叫我?

    不开玩笑了,继续

    总的来说,match就是

    • 返回匹配的match对象
    • 默认从给定字符串的开头开始匹配、即使正则表达式没有用^声明匹配开头

    match对象??

    Match对象的几个属性:

    注意,前面是有“.”的
    1..string 待匹配的文本
    2..re 匹配使用的pattern对象
    3..pos 正则表达式搜索文本的开始位置
    4..endpos 正则表达式搜索文本的结束位置
    Match对象的几个方法:
    1.group(0) 返回匹配到的子串
    2.start() 返回匹配子串的开始位置
    3.end() 返回匹配子串的结束位置
    4.span() 返回start()、end()

    数量词??

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWVJfVA==,size_19,color_FFFFFF,t_70,g_se,x_16

    匹配开头、结尾??

    647a8685264d461799e9dbfee4201c06.png

    匹配分组??

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWVJfVA==,size_20,color_FFFFFF,t_70,g_se,x_16

    好了,看了上面几张表,其实我觉得最重要的在下面e2e2439efb474c83ab4e691acd2d0827.png

    match总结??

    其实没啥好总结的,但你要看懂这张图,这个很重要

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWVJfVA==,size_16,color_FFFFFF,t_70,g_se,x_16

    我框出来的是我自己感觉经常用的

    其实我自己刚学的时候也听不懂,现在觉得可简单了

    所以,你应该现在就觉得很简单吧?

    但是,正则表达式的字符很多,容易记混,一不小心就好几十个报错,很让人崩溃

    80fedf710ab141abae6613a0e6b4ecca.gif

    实践出真知 凸(`0′)凸

    学了这么多,是不是想撸个程序了?

    已经给你准备好了

    程序效果:输入手机号,通过正则表达式判断手机号合不合法,

    如果合法,就输出这个手机号的信息(所属地等)

    如果不合法,就重新输入,简单吧?

    这里我想重点说一下怎么获取手机号的信息

    我一开始打算上网上百度一波的,没想到直接复制过来23个报错、我也是醉了

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkBZUl9U,size_20,color_FFFFFF,t_70,g_se,x_16

    哎呀,不能再发表情包了

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkBZUl9U,size_16,color_FFFFFF,t_70,g_se,x_16

    ε=(′ο`*)))唉,还是自己写吧、、、

    我想起了有个模块叫phone,可以实现这个功能

    但是你可能还没有安装这个模块,要按命令行模式下输入pip install phone

    等个六六四十九秒就下载下来了

    然后你就可以体验一下了

    代码(PyCharm运行通过)

    import phone
    from time import *
    import re
    
    def begin():
        print("欢迎来到查询小程序")
        print("1.查询")
        print("2.用户")
    
    
    def p(n):
        if re.match(r'1[3,4,5,7,8]d{9}', n):
            if re.match(r'13[0,1,2]d{8}', n) or 
                re.match(r"15[5,6]d{8}", n) or 
                re.match(r"18[5,6]", n) or 
                re.match(r"145d{8}", n) or 
                re.match(r"176d{8}", n):
                return True
            elif re.match(r"13[4,5,6,7,8,9]d{8}", n) or 
                re.match(r"147d{8}|178d{8}", n) or 
                re.match(r"15[0,1,2,7,8,9]d{8}", n) or 
                re.match(r"18[2,3,4,7,8]d{8}", n):
                return True
            else:
                return True
        else:
            return False
    
    if __name__ == "__main__":
        s=0
        begin()
        while True:
            op = int(input("请输入:"))
            if op==1:
                phoneNum = str(input("请输入你的电话号码"))
                if p(phoneNum)==False:
                    print("该手机号无效")
                    for i in range(100):
                        print('
    ')
                    begin()
                else:
                    info = phone.Phone().find(phoneNum)
                    print("手机号码:"+str(info["phone"]))
                    print("手机所属地:"+str(info["province"])+"省"+str(info["city"])+"市")
                    print("邮政编号:"+str(info["zip_code"]))
                    print("区域号码:"+str(info["area_code"]))
                    print("手机类型:"+str(info["phone_type"]))
                    s+=1
                    i = input("输入任意数退出...")
                    for i in range(100):
                        print('
    ')
                    begin()
            if op==2:
                print("使用次数:"+str(s))
                i = input("输入任意数退出...")
                for i in range(100):
                    print('
    ')
                begin()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    写在最后??

    感觉这次的博客好像比较长,你能看到这里,已经超越了60%的人了,如果有谁还不是很明白,或者有c++和python的问题,都可以私信我,我看到后会一一回复哦

    watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkBZUl9U,size_20,color_FFFFFF,t_70,g_se,x_16

    另外,互粉必回??

    感谢您的阅读,拜拜!

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    音响是如何把微弱声音放大呢
    【打工日常】云原生之部署个人使用的高速下载器Gopeed
    spring cloud gateway谓词工厂 Predicate Factory
    mindspore两日集训营202209-预热作业和作业一
    数据库压力测试方法小结
    01-MQ介绍以及产品比较
    源码编译OpenCV 启用cuda 加速
    手写一个自己的mystrstr
    Spring的web集成 (Spring监听器)
    c语言编程 结构结合(union)
  • 原文地址:https://blog.csdn.net/m0_67403073/article/details/126113920