正则表达式

一、正则表达式基础语法

1. 普通字符与元字符

  • 普通字符:直接匹配字面值(如 a 匹配字符 a)。
  • 元字符:具有特殊含义,需转义使用(如 \d 匹配数字,\w 匹配字母、数字、下划线)。
    • 边界匹配符:
      ^(字符串开头)、$(字符串结尾)、\b(单词边界,如 java\b 匹配独立单词 java)。
    • 点号 .:匹配除换行符外的任意字符(默认),配合 s 修饰符可匹配换行符。

2. 预定义字符集

元字符 匹配内容 示例
\d 数字(等价于 [0-9] \d+ 匹配连续数字
\D 非数字(等价于 [^0-9] \D* 匹配非数字序列
\w 单词字符(字母、数字、下划线) \w{3,} 匹配3-15位用户名
\s 空白字符(空格、制表符等) \s+ 匹配连续空格

3. 量词

  • *:匹配0次或多次(如 a* 匹配空字符串或多个 a)。
  • +:匹配1次或多次(如 a+ 至少匹配一个 a)。
  • ?:匹配0次或1次(如 a? 可选 a)。
  • {n,m}:匹配n到m次(如 \d{3,5} 匹配3-5位数字)。

二、正则表达式核心功能

  1. 验证字符串
    通过模式匹配检查输入合法性,如邮箱、电话号码格式。

    python 复制代码
    import re
    pattern = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"
    re.match(pattern, "user@example.com")  # 验证邮箱
  2. 查找与替换

    • findall():返回所有匹配项(如提取文本中的数字)。
    • sub():替换匹配内容(如将逗号替换为分号)。
    python 复制代码
    text = "Date: 2023-04-15, Time: 14:30"
    date_time = re.search(r"Date: (\d{4}-\d{2}-\d{2}), Time: (\d{2}:\d{2})", text)
    print(date_time.groups())  # 输出 ('2023-04-15', '14:30')
  3. 分组与捕获
    使用 () 分组,提取特定部分(如从URL中提取路径)。

    python 复制代码
    url = "https://example.com/path/to/page"
    match = re.match(r"https://(.*)/(\w+)", url)
    print(match.group(1))  # 输出 example.com/path/to
    print(match.group(2))  # 输出 page

三、修饰符与高级特性

  1. 常用修饰符
    • i:忽略大小写(如 Aa 均匹配)。
    • g:全局匹配(返回所有匹配项)。
    • m:多行模式(^$ 匹配每行的开头和结尾)。
    • s:点号匹配换行符。
  2. 非贪婪匹配
    添加 ? 实现最小匹配(如 a.*?b 匹配 a...b 中最短的部分)。

四、应用场景示例

  1. 数据提取
    从日志中提取时间戳:

    python 复制代码
    text = "2023-04-15T14:30:00 Error: Invalid input"
    date = re.search(r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}", text).group()
  2. 文本格式化
    自动替换标点符号:

    python 复制代码
    text = "Hello, World! 你好,世界!"
    new_text = re.sub(r"[,!]}", " ", text)  # 输出 "Hello  World  你好  世界!"
  3. 网页数据抓取
    提取HTML中的链接:

    python 复制代码
    html = "Link"
    links = re.findall(r"href='([^']*)'", html)  # 输出 ['https://example.com']

五、常见问题与优化

  1. 转义字符
    元字符(如 .*)需转义为 \.\*
  2. 性能优化
    • 避免过度使用 .*,优先使用精确匹配(如 \d{4} 代替 .*)。
    • 预编译正则表达式(如 re.compile(pattern))提升多次调用效率。

六、总结

正则表达式是处理文本数据的高效工具,适用于验证、查找、替换和提取等场景。掌握其核心语法(元字符、量词、分组)和修饰符(ig)可显著提升开发效率。实际应用中需注意转义规则和性能优化,结合具体语言的库(如Python的 re 模块)实现功能。

相关推荐
IMPYLH几秒前
Lua 的 IO (输入/输出)模块
开发语言·笔记·后端·lua
2301_783360131 分钟前
【学习笔记】关于RNA_seq和Ribo_seq技术的对比和BAM生成
笔记·学习
qq_397731512 分钟前
Objective-C 学习笔记(第9章)
笔记·学习·objective-c
C++业余爱好者3 分钟前
SQL语言家族入门指南:标准SQL、T-SQL与PL/SQL详解
数据库·sql
白驹过隙^^5 分钟前
OB-USP-AGENT安装使用方法
数据库·经验分享·网络协议·tcp/ip·github·ssl
计算机程序设计小李同学6 分钟前
基于Python的在线零食购物商城系统的设计与实现
数据库·sqlite
Java爱好狂.21 分钟前
Java面试Redis核心知识点整理!
java·数据库·redis·分布式锁·java面试·后端开发·java八股文
小程故事多_8022 分钟前
开源界核弹级输出!蚂蚁 Agentar-Scale-SQL 凭 “编排式扩展” 技术,成为 Text-to-SQL 天花板
数据库·人工智能·sql·开源·aigc·embedding
ujainu31 分钟前
Python学习第一天:保留字和标识符
python·学习·标识符·保留字