当前位置: 首页 > news >正文

Python--正则表达式

1. 日志打印与终端颜色控制

1.1 使用 loguru​ 打印日志

from loguru import loggerlogger.debug("调试信息")
logger.info("普通信息")
logger.warning("警告信息")
logger.error("错误信息")
logger.success("成功信息")

1.2 终端颜色控制(Colorama)

Colorama 库用于控制终端输出的颜色和样式。

  • 字体颜色:Fore.RED​, Fore.GREEN​
  • 背景颜色:Back.BLACK​, Back.CYAN​
  • 样式:Style.BRIGHT​, Style.DIM​

示例:

from colorama import Fore, Back, Styleprint(Fore.RED + "红色字体" + Style.RESET_ALL)
print(Back.GREEN + "绿色背景" + Style.RESET_ALL)
print(Style.BRIGHT + "高亮文本" + Style.RESET_ALL)

2. 正则表达式

2.1 基础语法与元字符

元字符描述示例
​.​匹配除换行符外的任意字符​a.c​ → "abc", "a1c"
​|​逻辑或​a|b​ → "a" 或 "b"
​[]​字符集匹配​[aeiou]​ → 匹配任意元音字母
​[^]​字符集取反​[^0-9]​ → 匹配非数字字符
​()​分组匹配​(ab)+​ → "ab", "abab"
​\​转义字符​\.​ → 匹配小数点 .​

2.2 预定义字符集

表达式匹配内容等价形式
​\d​数字​[0-9]​
​\w​字母/数字/下划线​[A-Za-z0-9_]​
​\s​空白字符​[ \t\n\r\f\v]​
​\D​非数字​[^\d]​
​\W​非单词字符​[^\w]​
​\S​非空白字符​[^\s]​

2.3 重复匹配

表达式描述示例
​{n}​重复n次​a{3}​ → "aaa"
​{m,n}​重复m到n次​a{2,4}​ → "aa", "aaa", "aaaa"
​?​0或1次​a?​ → "" 或 "a"
​+​至少1次​a+​ → "a", "aaa"
​*​0到多次​a*​ → "", "a", "aaaa"

2.4 贪婪与非贪婪模式

  • 贪婪模式:默认匹配尽可能长的字符串。

    • 示例:a.*b​ 匹配 "aabcb" 中的整个字符串。
  • 非贪婪模式:使用 ?​ 匹配尽可能短的字符串。

    • 示例:a.*?b​ 匹配 "aabcb" 中的 "aab" 和 "ab"。

2.5 常用正则表达式案例

  • 邮箱匹配:^[\w\.-]+@[\w\.-]+\.\w+$​
  • IP地址匹配:^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$​
  • 日期格式(YYYY-MM-DD):^\d{4}-\d{2}-\d{2}$​

2.6 高级功能

分组与后向引用
  • 分组捕获:使用 ()​ 分组并提取匹配内容。

    import re
    pattern = r"(\d{4})-(\d{2})-(\d{2})"
    match = re.match(pattern, "2023-10-05")
    if match:year, month, day = match.groups()print(f"Year: {year}, Month: {month}, Day: {day}")  # Year: 2023, Month: 10, Day: 05
    
  • 后向引用:通过 \1​, \2​ 引用分组内容。

    # 匹配重复单词,如 "hello hello"
    pattern = r"(\b\w+\b)\s+\1"
    print(re.findall(pattern, "hello hello world"))  # ['hello']
    
零宽断言(Lookahead/Lookbehind)
  • 正向肯定预查 (?=...)​:匹配后面紧跟特定模式的位置。

    # 匹配后面跟着 "px" 的数字,如 "100px"
    pattern = r"\d+(?=px)"
    print(re.findall(pattern, "200px 300em 150px"))  # ['200', '150']
    
  • 负向否定预查 (?!...)​:匹配后面不跟特定模式的位置。

    # 匹配不以 "px" 结尾的数字,如 "200em"
    pattern = r"\d+(?!px)"
    print(re.findall(pattern, "200px 300em 150px"))  # ['300']
    
正则表达式修饰符
修饰符描述示例
​re.I​忽略大小写​re.findall(r"apple", "Apple", re.I)​ → ['Apple']​
​re.M​多行模式使 ^​ 和 $​ 匹配每行的开头和结尾
​re.S​让 .​ 匹配包括换行符在内的所有字符​re.findall(r"a.*b", "a\nb", re.S)​ → ['a\nb']​

http://www.lryc.cn/news/538222.html

相关文章:

  • 【java面试】线程篇
  • 分布式光纤传感:为生活编织“感知密网”
  • cmake Qt Mingw windows构建
  • 无人机信号调制技术原理
  • 书评与笔记:《如何有效报告Bug》
  • 3.【线性代数】——矩阵乘法和逆矩阵
  • [JVM篇]虚拟机性能监控、故障处理工具
  • UniApp 中 margin 和 padding 属性的使用详解
  • `fi` 是 Bash 脚本中用来结束 `if` 条件语句块的关键字
  • cap2:1000分类的ResNet的TensorRT部署指南(python版)
  • 每日一题——把数字翻译成字符串
  • 我们来学HTTP/TCP -- 三次握手?
  • 多媒体软件安全与授权新范例,用 CodeMeter 实现安全、高效的软件许可管理
  • SQL复习
  • 红队视角出发的k8s敏感信息收集——日志与监控系统
  • Flask中获取请求参数的一些方式总结
  • 架构——LVS负载均衡主要模式及其原理、服务水平、优缺点
  • 【漫话机器学习系列】093.代价函数和损失函数(Cost and Loss Functions)
  • Android 13 上通过修改 AOSP 拦截 SystemUI 音量调节事件
  • SQL与数据库程序设计
  • 大模型Deepseek的使用_基于阿里云百炼和Chatbox
  • AlmaLinux9.5安装samba实现与Windows文件共享 笔记250214
  • 二〇二四年终总结
  • 学习sql的资源:sql练习平台;在线编辑器,免费sql教程,免费sql书籍
  • 宝塔和docker的区别
  • 机器学习--实现多元线性回归
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter2-HTML 中的 JavaScript
  • 【人工智能】释放数据潜能:使用Featuretools进行自动化特征工程
  • 算法——对比A*算法与IDA*算法
  • GitLab CI/CD 的配置详解:从零开始使用 .gitlab-ci.yml 文件