• Python---正则表达式


    正则表达式:使用re模块,基于re模块中的三个基础方法来做正则匹配,分别是:match, search, findall​​​​​​​

    当字符串以r前缀开始时,Python将不会对字符串中的转义字符进行转义处理

    re.match(匹配规则,被匹配字符串)

     从被匹配字符串开头进行匹配,匹配成功返回匹配对象(包含匹配的信息),匹配不成功返回空

    1. import re
    2. # 从头开始匹配
    3. s = "abc bac bca cab cba"
    4. result = re.match("abc", s)
    5. print(result) #
    6. print(result.span()) # (0, 3)
    7. print(result.group()) # abc
    8. result1 = re.match("bac", s)
    9. print(result1) # None
    10. # print(result1.span()) # 会报错
    11. # print(result1.group()) # 会报错

    search(匹配规则,被匹配字符串)

    搜索整个字符串,找出匹配的.从前向后,找到第一个就停止,不会继续向后查找

    1. import re
    2. s = "sd999abc999sdabc"
    3. result = re.search("abc", s)
    4. print(result) #
    5. print(result.span()) # (5, 8)
    6. print(result.group()) # abc
    7. result1 = re.search("qw", s)
    8. print(result1) # None
    9. # print(result1.span()) # 会报错
    10. # print(result1.group()) # 会报错

    findall(匹配规则,被匹配字符串)

    匹配整个字符串,找出全部匹配项

    1. import re
    2. s = "sd999abc999sdabc"
    3. result = re.findall("abc", s)
    4. print(result) # ['abc', 'abc']

    单字符匹配

    .  :匹配任意一个字符串(除了\n), \.匹配点本身
    [] : 匹配[]中列举的字符
    \d : 匹配数字, 即0 - 9
    \D : 匹配非数字
    \s : 匹配空白, 即空格和tab键
    \S : 匹配非空白
    \w : 匹配单词字符, 即a - z, A - Z, 0 - 9, _
    \W : 匹配非单词字符

    1. import re
    2. s = "hello @@hiHI !!999 ##hahaHA 456"
    3. # 找出全部数字
    4. result = re.findall(r"\d", s) # 当字符串以r前缀开始时,Python将不会对字符串中的转义字符进行转义处理
    5. print(result) # ['9', '9', '9', '4', '5', '6']
    6. # 找出全部非单词字符
    7. result1 = re.findall(r"\W", s)
    8. print(result1) # [' ', '@', '@', ' ', '!', '!', ' ', '#', '#', ' ']
    9. # 找出全部单词字符
    10. result2 = re.findall(r"\w", s)
    11. print(
    12. result2) # ['h', 'e', 'l', 'l', 'o', 'h', 'i', 'H', 'I', '9', '9', '9', 'h', 'a', 'h', 'a', 'H', 'A', '4', '5', '6']
    13. # 找出全部a-z和A-Z的的字母
    14. result3 = re.findall(r"[a-zA-Z]", s)
    15. print(result3) # ['h', 'e', 'l', 'l', 'o', 'h', 'i', 'H', 'I', 'h', 'a', 'h', 'a', 'H', 'A']
    16. result4 = re.findall(r"[a-z]", s)
    17. print(result4) # ['h', 'e', 'l', 'l', 'o', 'h', 'i', 'h', 'a', 'h', 'a']

    数量匹配

    * : 匹配前一个规则的字符出现0至无数次
    + : 匹配前一个规则的字符出现1至无数次
    ? : 匹配前一个规则的字符出现0至1次
    {m} : 匹配前一个规则的字符出现m次
    {m,} : 匹配前一个规则的字符最少出现m次
    {m,n} : 匹配前一个规则的字符出现m到n次

    边界匹配

    ^ : 匹配字符串开头
    $ : 匹配字符串结尾
    \b : 匹配一个单词的边界
    \B : 匹配非单词边界

    分组匹配

    | : 匹配左右任意一个表达
    () : 将括号中的字符作为一个分组

    1. # 匹配账号:只能有字母和数字组成,长度限制6-10位
    2. r = "^[0-9a-zA-Z]{6,10}$"
    3. s = '1234567'
    4. s1 = '1234567a'
    5. s2 = '1234567a_'
    6. print(re.findall(r, s)) # ['1234567']
    7. print(re.findall(r, s1)) # ['1234567a']
    8. print(re.findall(r, s2)) # []
    9. # 匹配QQ号:纯数字,长度5-11,第一位不为0
    10. r1 = "^[1-9][0-9]{4,10}$"
    11. q = "0123456"
    12. q1 = "123456"
    13. print(re.findall(r1, q)) # []
    14. print(re.findall(r1, q1)) # ['123456']
    15. # 匹配邮箱地址:只允许q,163,gmail这三种邮箱地址
    16. # {内容}.{内容}.@{内容}
    17. r2 = "(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)"
    18. e = "abc.asd.qwe@163.com.a.c"
    19. e1 = "233@123.cdw"
    20. print(re.findall(r2, e)) # [('abc.asd.qwe@163.com.a.c', '.qwe', '163', '.c')]
    21. print(re.match(r2, e)) #
    22. print(re.match(r2, e1)) # None

  • 相关阅读:
    odoo 为可编辑列表视图字段搜索添加查询过滤条件
    二叉搜索树问题
    05-vue全局私有组件,组件的切换,组件的简单动画,父子组件之间方法和值的传递
    计算机网络例题答案
    【Java中23种面试常考的设计模式之装饰器模式(Decorator)---结构型模式】
    Java设计模式-活动对象与访问者
    2023-9-30 JZ34 二叉树中和为某一值的路径
    安卓——图片加载工具(Glide封装版)
    Tomcat 启动闪退问题解决集(八大类详细)
    【Leetcode hot 100】96. 不同的二叉搜索树
  • 原文地址:https://blog.csdn.net/weixin_52053631/article/details/134085065