Python re.search() 方法
re.search() 是 Python re 模块中用于搜索模式的函数,它会在字符串中扫描查找匹配指定正则表达式的第一个位置。
与 re.match() 不同,re.search() 不要求从字符串开头匹配,它会在字符串的任意位置查找匹配。
单词释义: search 是搜索、查找的意思。
基本语法与参数
re.search() 是一个模块级函数,直接通过 re 模块调用。
语法格式
re.search(pattern, string, flags=0)
参数说明
- pattern:
- 类型:字符串 (str)
- 描述:要匹配的正则表达式模式。
- string:
- 类型:字符串 (str)
- 描述:被搜索的字符串,在其中查找匹配。
- flags:
- 类型:整数 (int, 可选)
- 描述:正则表达式标志,用于控制匹配模式。如
re.IGNORECASE、re.MULTILINE等。
函数说明
- 返回值: 如果找到匹配,返回一个
match对象;如果没有找到匹配,返回None。 - 效果: 返回第一个匹配的位置信息,包括匹配的内容、起始位置和结束位置。
实例
让我们通过一系列从简单到复杂的例子,彻底掌握 re.search() 的用法。
示例 1:基础用法 - 查找第一个匹配
实例
import re
# 在字符串中搜索第一个匹配的数字
text = "Python 3.9 是最常用的版本"
result = re.search(r'\d+\.\d+', text)
if result:
print("找到匹配:", result.group()) # 输出: 3.9
print("匹配起始位置:", result.start()) # 输出: 7
print("匹配结束位置:", result.end()) # 输出: 10
# 在字符串中搜索第一个匹配的数字
text = "Python 3.9 是最常用的版本"
result = re.search(r'\d+\.\d+', text)
if result:
print("找到匹配:", result.group()) # 输出: 3.9
print("匹配起始位置:", result.start()) # 输出: 7
print("匹配结束位置:", result.end()) # 输出: 10
运行结果预期:
找到匹配: 3.9 匹配起始位置: 7 匹配结束位置: 10
代码解析:
r'\d+\.\d+'匹配一个或多个数字,后跟一个点,再跟一个或多个数字(版本号格式)。re.search()返回第一个匹配位置的对象。result.group()返回匹配的文本内容。result.start()和result.end()返回匹配的位置索引。
示例 2:查找任意位置的匹配
re.search() 可以在字符串的任意位置查找,这是它与 re.match() 的主要区别。
实例
import re
text = "我的手机号是 138-1234-5678,他的手机号是 139-9876-5432"
# 查找第一个手机号
result = re.search(r'\d{3}-\d{4}-\d{4}', text)
if result:
print("第一个手机号:", result.group())
text = "我的手机号是 138-1234-5678,他的手机号是 139-9876-5432"
# 查找第一个手机号
result = re.search(r'\d{3}-\d{4}-\d{4}', text)
if result:
print("第一个手机号:", result.group())
运行结果预期:
第一个手机号: 138-1234-5678
代码解析:
\d{3}-\d{4}-\d{4}匹配中国手机号格式(3位-4位-4位)。re.search()找到第一个匹配就返回,不会继续查找。
示例 3:使用标志位忽略大小写
通过 flags 参数可以改变匹配行为,如忽略大小写。
实例
import re
text = "Python is a Powerful Programming Language"
# 使用 re.IGNORECASE 忽略大小写
result = re.search(r'python', text, re.IGNORECASE)
if result:
print("找到:", result.group()) # 输出: Python
text = "Python is a Powerful Programming Language"
# 使用 re.IGNORECASE 忽略大小写
result = re.search(r'python', text, re.IGNORECASE)
if result:
print("找到:", result.group()) # 输出: Python
运行结果预期:
找到: Python
代码解析:
re.IGNORECASE让匹配不区分大小写,所以能匹配到 "Python"。
示例 4:提取分组内容
使用圆括号 () 可以创建分组,提取感兴趣的特定部分。
实例
import re
text = "用户邮箱: [email protected]"
# 使用分组提取用户名和域名
result = re.search(r'(\w+)@(\w+\.\w+)', text)
if result:
print("完整匹配:", result.group()) # [email protected]
print("第1个分组:", result.group(1)) # user
print("第2个分组:", result.group(2)) # example.com
text = "用户邮箱: [email protected]"
# 使用分组提取用户名和域名
result = re.search(r'(\w+)@(\w+\.\w+)', text)
if result:
print("完整匹配:", result.group()) # [email protected]
print("第1个分组:", result.group(1)) # user
print("第2个分组:", result.group(2)) # example.com
运行结果预期:
完整匹配: [email protected] 第1个分组: user 第2个分组: example.com
代码解析:
- 圆括号
()创建了两个分组。 result.group(1)和result.group(2)分别提取两个分组的内容。
Python re 模块
点我分享笔记