Python--正则表达式

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

1.1 使用 loguru​ 打印日志

复制代码
from loguru import logger

logger.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, Style

print(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'

相关推荐
鹿鹿学长9 分钟前
微软把语音转写打到 0.1 美元/小时:5 个月降价 72%,AI 音频进入地板价时代
python·自动化
weixin_4407305010 分钟前
使用pytest中方法控制执行步骤(test_begin.py、test_end.py,@pytest.mark.run(order=1))
开发语言·python·pytest
ZnS_oscar15 分钟前
不用下载字体,获得仿宋字体
windows·word
小柯南敲键盘21 分钟前
跨境电商批量图片翻译与视频字幕翻译,就用跨马AI工具
大数据·人工智能·python·音视频
霸道流氓气质36 分钟前
通义千问 Chat 模型高级用法:Function Calling / Structured Output / 多轮对话
linux·运维·windows
geovindu38 分钟前
CSharp: Command Pattern
开发语言·后端·c#·.net·.netcore·命令模式·行为模式
心易行者1 小时前
Python自动化测试7步落地法:用python在线运行省掉90%环境配置时间
java·开发语言·人工智能·python·log4j·ai编程
Boop_wu1 小时前
[LangGraph] 案例 2 : 支持搜索的智能代理系统
服务器·windows·python·langchain
啦啦啦~~~2221 小时前
PC端+安卓端阅读器推荐!开源本地小说阅读器软件,
android·论文阅读·windows·开源软件·福昕阅读器
2601_962297251 小时前
Python、Pytest、Allure、Selenium和Jenkins实现自动化测试集成实例
python·selenium·jenkins·pytest·allure