python正则表达式

时间:2025-03-27 20:54:57 计算机

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