正则表达式

一、正则表达式基础语法

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, "[email protected]")  # 验证邮箱
  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 模块)实现功能。

相关推荐
bicijinlian18 分钟前
多语言笔记系列:使用导入魔法命令
笔记
zhang238390615428 分钟前
IDEA add gitlab account 提示
java·gitlab·intellij-idea·idea
橘猫云计算机设计30 分钟前
springboot基于hadoop的酷狗音乐爬虫大数据分析可视化系统(源码+lw+部署文档+讲解),源码可白嫖!
数据库·hadoop·spring boot·爬虫·python·数据分析·毕业设计
牛马baby1 小时前
Java高频面试之并发编程-07
java·开发语言·面试
卓怡学长1 小时前
w304基于HTML5的民谣网站的设计与实现
java·前端·数据库·spring boot·spring·html5
YONG823_API1 小时前
深度探究获取淘宝商品数据的途径|API接口|批量自动化采集商品数据
java·前端·自动化
电子云与长程纠缠1 小时前
Unreal Niagara制作SubUV贴图翻页动画
学习·ue5·编辑器·贴图·niagara
冰^1 小时前
MySQL VS SQL Server:优缺点全解析
数据库·数据仓库·redis·sql·mysql·json·数据库开发
yzhSWJ1 小时前
Spring Boot中自定义404异常处理问题学习笔记
java·javascript
电商数据girl2 小时前
产品经理对于电商接口的梳理||电商接口文档梳理与接入
大数据·数据库·python·自动化·产品经理