• python常用正则


    python通过re模块实现正则的。

    一、re模块常用方法:

    我们掌握findall()的用法就可以了,其他几个不常用。

    findall():匹配所有的字符串,把匹配结果作为一个列表返回

    match():匹配字符串的开始位置,如果开始位置没有就返回NOne

    search():在字符串搜索,返回搜索到的第一个

    finditer():匹配所有字符串,返回迭代器

    findall()在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。

    二、正则匹配的分类

    2.1 单字符:每次只匹配一个字符

    1. 。:匹配任意字符(除\n以外)
    2. []:匹配[]中的任意一个字符
    3. \d: 匹配数字
    4. \D: 匹配非数字
    5. \s(小写):匹配空白
    6. \S(大写):匹配非空白
    7. \w(小写):匹配非特殊字符(字符,数字,汉字,_)
    8. \W(大写):匹配特殊字符(-、@#¥)


    2.2 元字符

    1. *:匹配前一个字符出现0次,或者无限次(贪婪模式)
    2. +:匹配前一个字符出现1次或者无限次[贪婪模式]【1----无限次】
    3. ?:匹配前一个字符出现0次,或者1次(非贪婪模式)
    4. {n}:匹配前一个字符连续出现n次
    5. {n,m}:匹配前一个字符连续出现n-m次

    逻辑运算
    |:两个条件进行匹配,或的关系
    边界值
    ^:匹配字符串开始的位置
    $:匹配字符串结束的位置

    分组匹配

    ():只匹配括号里面的

    三、常用正则

    Python常用正则表达式总结 - 娇兮心有之 - 博客园
     

    1. 整数:^-?\d+$
    2. 英文字符串:^[A-Za-z]+$
    3. E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
    4.  
    5. URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$ 
    6. URL:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$
    7.  
    8. 邮政编码:^[1-9]\d{5}$
    9.   
    10. 中文:^[\u0391-\uFFE5]+$
    11.   
    12. 电话号码:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$
    13.   
    14. 手机号码:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$
    15. 提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F)  *=  *('|")?(\w|\\|\/|\.)+('|"|  *|>)?
    16. 提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
    17. 提取信息中的图片链接:(s|S)(r|R)(c|C)  *=  *('|")?(\w|\\|\/|\.)+('|"|  *|>)?
    18. 提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)
    19. 提取信息中的中国手机号码:(86)*0*13\d{9}
    20. 提取信息中的任何数字 :(-?\d*)(\.\d+)? 
    21. IP:(\d+)\.(\d+)\.(\d+)\.(\d+)
    22. 电话区号:/^0\d{2,3}$/
    23. 腾讯QQ号:^[1-9]*[1-9][0-9]*$
    24. 帐号(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
    25. 中文、英文、数字及下划线:^[\u4e00-\u9fa5_a-zA-Z0-9]+$
    26. 匹配中文字符的正则表达式: [\u4e00-\u9fa5]
    27. sql语句:^(select|drop|delete|create|update|insert).*$  
    28. 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

    使用Python验证常见的50个正则表达式 - 知乎

    1.邮箱

    包含大小写字母,下划线,阿拉伯数字,点号,中划线

    表达式:

    [a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)

    案例:

    1. import re
    2. strs = '我的私人邮箱是zhuwjwh@outlook.com,公司邮箱是123456@qq.org,麻烦登记一下?'
    3. result = re.findall(r"[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)",strs)
    4. print(result)

    输出:

    ['zhuwjwh@outlook.com', '123456@qq.org']

    2. 身份证号

    xxxxxx yyyy MM dd 375 0 十八位

    • 地区: [1-9]\d{5}
    • 年的前两位: (18|19|([23]\d)) 1800-2399
    • 年的后两位: \d{2}
    • 月份: ((0[1-9])|(10|11|12))
    • 天数: (([0-2][1-9])|10|20|30|31) 闰年不能禁止29+
    • 三位顺序码: \d{3}
    • 两位顺序码: \d{2}
    • 校验码: [0-9Xx]

    表达式:

    [1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]

    案例:

    1. import re
    2. strs = '小明的身份证号码是342623198910235163,手机号是13987692110'
    3. result = re.findall(r"[1-9]\d{5}(?:18|19|(?:[23]\d))\d{2}(?:(?:0[1-9])|(?:10|11|12))(?:(?:[0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]",strs)
    4. print(result)

    输出:

    ['342623198910235163']

    3、国内手机号码

    手机号都为11位,且以1开头,第二位一般为3、5、6、7、8、9 ,剩下九位任意数字
    例如:13987692110、15610098778

    表达式:

    1(3|4|5|6|7|8|9)\d{9}

    案例:

    1. import re
    2. strs = '小明的手机号是13987692110,你明天打给他'
    3. result = re.findall(r"1[356789]\d{9}",strs)
    4. print(result)
    5. ['13987692110']

    4、账号:

    包括中文、字母、数字下划线的组合 

    1. import re
    2. result_name1 = "张三、lisi\wan 望族99qq;我ai1__heihei;张三_a11"
    3. name_2 = re.findall('[\u4e00-\u9fa5_a-zA-Z0-9]+', result_name1)
    4. print(name_2)
    5. ['张三', 'lisi', 'wan', '望族99qq', '我ai1__heihei', '张三_a11']

    包括中文、字母、数字组合,不包含下划线

    1. import re
    2. result_name1 = "张三、lisi\wan 望族99qq;我ai1__heihei;张三_a11"
    3. name_2 = re.findall('[\u4e00-\u9fa5a-zA-Z0-9]+', result_name1)
    4. print(name_2)
    5. ['张三', 'lisi', 'wan', '望族99qq', '我ai1', 'heihei', '张三', 'a11']

     5、简易身份证号

    前17是数字,第18位是数字或者x或者X

    1. import re
    2. strs = '小明的身份证号码是342623198910235163,手机号是13987692110'
    3. name_2 = re.findall("[0-9]{17}[0-9Xx]", strs)
    4. print(name_2)
    5. ['342623198910235163']

  • 相关阅读:
    短文案查询易语言代码
    CommunityToolkit.Mvvm8.1 消息通知(4)
    PolarDB-X 源码解读:事务的一生
    <数据结构>单链表实战之实现两个有序链表的交并差集
    MyBatis笔记
    ElasticSearch安装为Win11服务
    怎样使cxGrid的DBCardView一张Card上只显示一条记录?
    【Linux】什么是yum?--linux中的软件包管理器详解
    Ubuntu 20.04 上安装和配置 neo4j
    239. 滑动窗口最大值/76. 最小覆盖子串
  • 原文地址:https://blog.csdn.net/qq_39208536/article/details/126966540