正则表达式

一、正则表达式基础语法

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 模块)实现功能。

相关推荐
心思这就是3 分钟前
sql注入
数据库·sql
福赖8 分钟前
《微服务即使通讯中redis的作用》
数据库·redis·缓存
隐退山林13 分钟前
JavaEE初阶:多线程进阶
java·开发语言
JMchen12315 分钟前
Android剪切板工具类ClipBoardUtil:简化剪切板操作
android·java·移动开发·android studio
自己的九又四分之三站台16 分钟前
向量数据库PGVector实操
数据库
sa1002717 分钟前
walmart沃尔玛关键词商品搜索实现逻辑
数据库·python
马猴烧酒.23 分钟前
【正则表达式详解|Java】从0学习实战够用
学习·正则表达式
蒹葭玉树24 分钟前
【C++上岸】C++常见面试题目--操作系统篇(第二十七期)
java·c++·面试
GHL28427109025 分钟前
TeamTalk-login_server学习
运维·服务器·c++·学习
后来后来啊26 分钟前
2026.1.28 & 1.29学习笔记
笔记·学习