正则表达式(Regular Expression, 简称 RegEx) 是一种用来匹配和操作字符串的强大工具。它通过一种特殊的语法规则来描述文本模式,可以用于查找、替换、提取特定格式的字符串。
正则表达式广泛应用于文本处理任务,如:
- 验证输入(如检查电子邮件地址是否合法)。
- 搜索和替换(如替换敏感信息)。
- 数据提取(如从 HTML 中提取 URL)。
1. 正则表达式的核心概念
正则表达式的规则由 普通字符 和 特殊字符(元字符) 组成。
(1) 普通字符
普通字符会直接匹配其字面含义。
例如:
- 正则表达式
hello
匹配字符串"hello"
。
(2) 特殊字符(元字符)
元字符有特殊意义,可以用来描述更复杂的匹配模式。以下是一些常见元字符及其功能:
元字符 | 含义 | 示例 |
---|---|---|
. |
匹配任意单个字符(除换行符) | a.b 匹配 "acb" 或 "a1b" |
* |
匹配前面的字符 0 次或多次 | ab* 匹配 "a" , "ab" , "abb" |
+ |
匹配前面的字符 1 次或多次 | ab+ 匹配 "ab" , "abb" |
? |
匹配前面的字符 0 次或 1 次 | ab? 匹配 "a" , "ab" |
^ |
匹配字符串的开始 | ^hello 匹配 "hello world" 的开头 |
$ |
匹配字符串的结束 | world$ 匹配 "hello world" 的结尾 |
[] |
匹配方括号内的任意一个字符 | [abc] 匹配 "a" , "b" , "c" |
` | ` | 或运算符,匹配左右任意一个表达式 |
() |
用于分组,提取子表达式 | (abc) 匹配 "abc" 并分组 |
\ |
转义字符,用于匹配元字符的字面意义 | \. 匹配 "." |
{} |
匹配指定次数 | a{2} 匹配 "aa" ,a{2,4} 匹配 2 到 4 个 "a" |
2. 实用示例
(1) 匹配特定模式
-
匹配数字:
\d+
\d
表示任意数字(相当于[0-9]
),+
表示匹配 1 次或多次。- 可匹配
"12345"
或"42"
。
-
匹配电子邮件地址:
\w+@\w+\.\w+
\w
表示字母、数字或下划线(相当于[A-Za-z0-9_]
)。@
和.
是固定字符,表示邮件格式。
(2) 替换字符串
用正则表达式替换电话号码中的破折号为空格:
python
import re
text = "My phone number is 123-456-7890."
result = re.sub(r"\d{3}-\d{3}-\d{4}", "XXX-XXX-XXXX", text)
print(result)
# 输出: My phone number is XXX-XXX-XXXX.
(3) 检查字符串格式
验证一个字符串是否是合法的邮政编码(如 6 位数字):
python
import re
zipcode = "123456"
pattern = r"^\d{6}$" # 表示开头到结尾正好是 6 位数字
if re.match(pattern, zipcode):
print("合法邮政编码")
else:
print("非法邮政编码")
3. 常用正则表达式模式
功能 | 正则表达式 | 示例 |
---|---|---|
匹配 4 位数字 | ^\d{4}$ |
"2024" 匹配成功 |
匹配手机号(简单版) | ^1[3-9]\d{9}$ |
"13812345678" 匹配成功 |
匹配网址 | https?://\S+ |
"http://example.com" 匹配成功 |
匹配日期(yyyy-mm-dd) | \d{4}-\d{2}-\d{2} |
"2024-12-19" 匹配成功 |
4. 应用场景
- 数据清洗:提取符合格式的文本(如提取所有日期)。
- 表单验证:验证输入格式,如身份证号、邮箱、手机号。
- 文本分析:如日志文件的分析,提取错误信息。
- 文件操作:批量重命名文件或搜索内容。