• 【Python】正则re的使用


    【Python】正则re的使用

    一、正则re

    1. 正则是什么

      • 字符串匹配
      • 从一堆字符串中查找符合条件的字符串
      • 正则表达式:特殊的字符序列,检查一个字符串是否与某种模式匹配
      • re 模块:拥有全部的正则表达式功能
    2. 正则表达式使用

      • 常用的正则模式串编写 (pattern)
      • 使用模式串进行匹配
      • re.match(pattern, string, flags=0)
        • pattern: 模式串
        • string: 需要被查找的字符串
        • flags: 正则表达式的匹配方式 (如:是否区分大小写,多行匹配等等)
        • 如果匹配成功则返回匹配对象,否则返回None
      • re.findall(pattern, string, flags=0)
        • 在string中查找所有子串,返回一个列表;没有找到匹配,返回空列表
        • match只查找一次,findall匹配所有
    3. 神一样的(.*?)

      • .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
      • (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串
    4. 可选标志(flags)

      可选标志修饰符用于控制匹配的模式。多个标志可以通过按位 OR(|) 它们来指定。(如 re.I | re.M 被设置成 I 和 M 标志)

      修饰符描述
      re.I使匹配对大小写不敏感
      re.L做本地化识别(locale-aware)匹配
      re.M多行匹配,影响 ^ 和 $
      re.S使 . 匹配包括换行在内的所有字符
      re.U根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
      re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解
    5. 常用正则模式符

    6. 案例: 字符串

    s = '''abcd-摩托车.blend\n-----1234-大象.blend\n----efg-卡车.blend\n----5678-蘑菇.blend\n---'''
    import re
    #   - 只提取前面有数字的  blender文件信息
    
    pattern = r"[0-9]+.+\.blend"
    pattern = r"-([0-9]+.*?)\n"
    
    res = re.findall(pattern=pattern, string=s)
    print(res)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    常用的正则模式串编写 (pattern)

    • 单字符:
      • “.” 匹配一个任意字符
      • [] 匹配中括号内的一个字符
      • “\d” 匹配数字0-9中的一个 digital
      • “\D” 匹配非数字的任意一个字符
      • “\s” 匹配一个空白符 如 空格、制表符 space
      • “\S” 匹配非空白符的任意一个字符
      • “\w” 匹配字母+数字,即a-z+A-Z+0-9中 的一个 word
      • “\W” 匹配非字母非数字的任意一个字符
    • 数量符:
      • “*” 前一个字符出现次数任意
      • “+” 前一个字符出现次数 ≥ 1
      • “?” 前一个字符出现次数 ≤ 1
      • {m} 前一个字符出现次数 = m
      • {m,} 前一个字符出现次数 ≥ m
      • {m,n} m ≤ 前一个字符出现次数 ≤ n
    • 边界符:
      • ^ 开始标记
      • & 结束标记
      • \b 单词 边界
      • \B 非单词 边界
    import re
    
    email1 = "karrycharon@qq.com"
    email2 = "karrycharon@163.net"
    email3 = "邮箱--karrycharon@163.com"
    email4 = "karrycharon@qqcom"
    # .net结尾   中文开头   没有@  没有.
    pattern = r'^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.com$'
    res = re.findall(pattern=pattern, string=email1)
    print("emil1:", res)
    res = re.findall(pattern=pattern, string=email2)
    print("emil2:", res)
    res = re.findall(pattern=pattern, string=email3)
    print("emil3:", res)
    res = re.findall(pattern=pattern, string=email4)
    print("emil4:", res)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    -完全数-
    面向对象, 常用类, 集合, 异常, JDBC, mysql数据库 复习
    BGP笔记
    c语言练习42:判断回文数
    LeetCode 1114 按序打印
    递归算法 -- 解决全排列问题
    [PAT练级笔记] 41 Basic Level 1041 考试座位号
    使用gojs画出拓扑图,清晰的看出组织人员关系
    音频频谱显示-显示音频文件静态频谱图(一)
    【SpringMVC】web.xml和spring_mvc.xml文件配置
  • 原文地址:https://blog.csdn.net/qq_43331089/article/details/126168329