正则表达式通过普通字符与元字符组合,定义字符串匹配规则,用于文本搜索、替换、验证。
元字符速查
| 元字符 | 含义 | 示例 |
|---|
. | 任意单字符 | a.c → abc, a1c |
^ | 字符串开头 | ^The |
$ | 字符串结尾 | end$ |
* | 0次或多次 | ab* → a, ab, abbb |
+ | 1次或多次 | ab+ → ab, abbb |
? | 0次或1次 | ab? → a, ab |
{n} | 精确n次 | a{3} → aaa |
{n,m} | n到m次 | a{2,4} |
| ` | ` | 或 |
[] | 字符集 | [aeiou], [0-9] |
() | 分组捕获 | (abc)+ |
常用模式
# 邮箱
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
# 中国手机号
^1[3-9]\d{9}$
# 日期 YYYY-MM-DD
^\d{4}-\d{2}-\d{2}$
# URL
^(https?://)?(www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(/.*)?$
Python 示例
1
2
3
4
5
6
7
8
9
10
| import re
# 匹配
re.findall(r'\d+', "123abc456") # ['123', '456']
# 替换
re.sub(r'abc', 'XYZ', "123abc456") # '123XYZ456'
# 验证
bool(re.match(r'^\d+$', '12345')) # True
|
高级特性
| 特性 | 语法 | 用途 |
|---|
| 非捕获分组 | (?:abc) | 仅匹配,不保存 |
| 正向前瞻 | (?=abc) | 后面是 abc |
| 负向前瞻 | (?!abc) | 后面不是 abc |
| 正向后瞻 | (?<=abc) | 前面是 abc |
| 负向后瞻 | (?<!abc) | 前面不是 abc |
Comments