Python 中的 re
模块是处理正则表达式的标准库,可以用来匹配字符串模式、提取子字符串、替换文本等。以下是 re
模块的基本用法和常见正则表达式模式入门。
1. 导入模块
在使用正则表达式之前,需要导入 re
模块:
import re
2. 常用函数
1)re.match
从字符串的开头尝试匹配一个模式。
result = re.match(r"hello", "hello world")
if result:
print("匹配成功")
else:
print("匹配失败")
2)re.search
在整个字符串中搜索第一次匹配的模式。
result = re.search(r"world", "hello world")
if result:
print("匹配成功")
3)re.findall
找到字符串中所有与模式匹配的子字符串,返回列表。
result = re.findall(r"\d+", "我有123个苹果和456个橙子")
print(result) # 输出:['123', '456']
4)re.sub
替换字符串中与模式匹配的部分。
result = re.sub(r"\d+", "数字", "我有123个苹果和456个橙子")
print(result) # 输出:我有数字个苹果和数字个橙子
5)re.split
按照匹配的模式拆分字符串。
result = re.split(r"\s+", "hello world python")
print(result) # 输出:['hello', 'world', 'python']
3. 常见正则表达式符号
符号 | 描述 | 示例 |
---|---|---|
. | 匹配任意单个字符(除换行符) | r"h.t" 匹配 hat , hot |
\d | 匹配数字(0-9) | r"\d+" 匹配 123 |
\D | 匹配非数字 | r"\D+" 匹配 abc |
\w | 匹配字母、数字或下划线 | r"\w+" 匹配 word123 |
\W | 匹配非字母、数字、下划线 | r"\W+" 匹配 #$@ |
\s | 匹配空白字符(空格、制表符、换行符等) | r"\s+" 匹配空格 |
\S | 匹配非空白字符 | r"\S+" 匹配 word |
^ | 匹配字符串开头 | r"^hello" 匹配 hello |
$ | 匹配字符串结尾 | r"world$" 匹配 world |
* | 匹配前一个字符 0 次或多次 | r"a*" 匹配 aaa 或空 |
+ | 匹配前一个字符 1 次或多次 | r"a+" 匹配 aaa |
? | 匹配前一个字符 0 次或 1 次 | r"a?" 匹配 a 或空 |
{n} | 匹配前一个字符正好 n 次 | r"a{3}" 匹配 aaa |
{n,m} | 匹配前一个字符 n 至 m 次 | r"a{1,3}" 匹配 a , aa |
[] | 匹配字符集中的任意一个字符 | r"[aeiou]" 匹配元音字母 |
` | ` | 或,匹配左或右模式 |
() | 分组,提取匹配内容 | r"(ab)+c" 匹配 abababc |
4. 示例用法
提取邮箱
text = "我的邮箱是 test@example.com,请联系我!"
match = re.search(r"\w+@\w+\.\w+", text)
if match:
print(f"邮箱地址:{match.group()}")
替换手机号中间部分为 *
text = "我的手机号是 13812345678,请保密!"
result = re.sub(r"(\d{3})\d{4}(\d{4})", r"\1****\2", text)
print(result) # 输出:我的手机号是 138****5678,请保密!
验证日期格式
date = "2024-12-11"
if re.match(r"\d{4}-\d{2}-\d{2}$", date):
print("日期格式正确")
else:
print("日期格式错误")
5. 提高技巧
- 熟悉正则语法:建议在 Regex101 等工具中尝试和调试正则表达式。
- 使用
re
模块中的re.VERBOSE
:可以通过注释让复杂的正则表达式更易读。pattern = re.compile(r""" \d{4} # 年份 - # 横杠 \d{2} # 月份 - # 横杠 \d{2} # 日期 """, re.VERBOSE)
开始练习从简单的模式匹配,逐步理解正则表达式的强大功能!