Python正则表达式是处理文本匹配和提取的强大工具,通过组合特殊字符和模式,可高效完成复杂文本处理任务。以下是核心内容总结:
一、基础概念与模块
核心模块
Python通过`re`模块提供正则表达式支持,无需额外安装。
匹配对象与方法
- `re.search()`:从字符串开头查找第一个匹配项。
- `re.match()`:仅匹配字符串开头。
- `re.findall()`:返回所有匹配项的列表。
- `re.compile()`:预编译正则表达式,提高效率。
二、常用匹配符号与语法
基础元字符
- `.`:匹配任意非换行字符。
- `^`:匹配字符串开头。
- `$`:匹配字符串结尾。
- `*`:匹配前一个字符0次或多次。
- `+`:匹配前一个字符1次或多次。
- `?`:匹配前一个字符0次或1次。
- `{m,n}`:匹配前一个字符至少m次,至多n次。
字符类与转义字符
- `[abc]`:匹配a、b或c。
- `[a-z]`/`[A-Z]`:分别匹配小写/大写字母。
- `[0-9]`:匹配数字。
- `\d`:匹配数字(等价于`[0-9]`)。
- `\D`:匹配非数字字符。
- `\w`:匹配字母、数字、下划线。
- `\S`:匹配非空白字符。
- `\s`:匹配空白字符(空格、制表符)。
三、实战应用示例
提取手机号
```python
import re
text = "我的电话是13812345678"
pattern = r"\d{11}"
match = re.search(pattern, text)
print(match.group()) 输出: 13812345678
```
匹配邮箱地址
```python
text = "联系我:test@example.com 或 admin@python.org"
pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
emails = re.findall(pattern, text)
print(emails) 输出: ['test@example.com', 'admin@python.org']
```
替换文本
```python
text = "小明的电话是13912345678"
pattern = r"(\d{3})\d{4}\d{4}"
masked_text = re.sub(pattern, r"\1 \d{4}", text)
print(masked_text) 输出: 小明的电话是 5678
```
四、注意事项与技巧
贪婪与非贪婪模式
- 默认为贪婪模式(如`a*`匹配最长可能字符串),可通过添加`?`实现非贪婪匹配(如`a*?`匹配最短可能字符串)。
- 示例:
```python
text = "标题1标题2标题3"
pattern = r"标题(.*?)标题" 非贪婪匹配
match = re.search(pattern, text)
print(match.group()) 输出: 标题2标题
```
预编译正则表达式
使用`re.compile()`提高多次匹配效率,例如:
```python
pattern = re.compile(r"\d{3}-\d{3}-\d{4}")
phone = "123-456-7890"
match = phoneRule.search(phone)
print(match.group()) 输出: 123-456-7890
```
元字符组合
通过组合元字符实现复杂匹配,如匹配邮箱后缀:
```python