python re 模块的使用

re模块是python的内置模块

文章参考: [Python re 模块 | 菜鸟教程](www.runoob.com/python3/pyt...

用于对于字符串中数据匹配,搜索,操作

需要查找特定的模式或替换某些字符

1.re模块的导入

python 复制代码
import re

2.常用re函数

(1)re.match()函数

从字符串起始位置 匹配正则表达式模式
基本语法 :​ | re.match(pattern, string, flags=0) |
re.match()函数包含三个主要参数:

  • **pattern** (必选):这是一个字符串,表示你要匹配的正则表达式规则,例如 r"\d+"用于匹配数字。
  • **string** (必选):这是待检测的目标字符串。
  • **flags** (可选):用于控制匹配方式的标志,例如忽略大小写 (re.I)、使点号匹配换行符 (re.S) 等。这是一个可选参数,默认为 0,表示不使用任何特殊标志。

基本查找

python 复制代码
import re
result = re.match(r'Hello', 'Hello, world!')
print(result)  # 输出: <re.Match object; span=(0, 5), match='Hello'>
print(result.group())  # 输出: Hello

使用分组提取内容

python 复制代码
#**使用分组提取内容**
import re 
line = "Cats are smarter than dogs" # 模式中有两个括号,创建了两个分组 matchObj = re.match(r'(.*) are (.*?) .*', line) 
if matchObj: 
    print("整个匹配的字符串: ", matchObj.group()) # Cats are smarter than dogs 
    print("第一个分组匹配的内容: ", matchObj.group(1)) # Cats 
    print("第二个分组匹配的内容: ", matchObj.group(2)) # smarter 
else: 
    print("No match!!")

注意: re.match()只检查字符串的开头 。这是它和 re.search()最关键的区别,后者会扫描整个字符串

(2)re.search()函数

用于在字符串中扫描并找到第一个 符合正则表达式模式的匹配项
基本语法 :​ | re.search(pattern, string, flags=0) |
re.search()函数包含三个主要参数 :(与re.search()函数是一致的只是搜索范围不同)

  • **pattern** (必选):一个字符串,代表你要匹配的正则表达式规则,例如 r"\d+"表示匹配一个或多个数字。
  • **string** (必选):待搜索的目标字符串。
  • **flags** (可选):用于控制匹配方式的标志,例如忽略大小写、多行模式等。这是一个可选参数,默认为0。常用的标志有:
    • re.I/ re.IGNORECASE: 忽略大小写 。
    • re.M/ re.MULTILINE: 影响 ^$的行为,使它们匹配每一行的开头和结尾 。
    • re.S/ re.DOTALL: 使点号 .匹配包括换行符在内的所有字符 。

基本查找

python 复制代码
import re 
result = re.search(r'\d+', '订购了3件商品,总计123元。') 
if result: 
    print(result.group()) # 输出: 3 (注意:这里匹配到的是第一个数字序列"3")

使用分组提取内容

在正则表达式中使用圆括号 ()可以创建分组,匹配成功后可以通过匹配对象的方法提取特定部分的内容 。

  • .group(0).group(): 获取整个模式匹配的完整文本。
  • .group(1), .group(2), ...: 按顺序获取第1个、第2个...分组匹配的文本。
  • .groups(): 返回一个包含所有分组匹配文本的元组。
python 复制代码
import re
text = "用户的邮箱地址是:contact@example.com,欢迎联系。"
# 模式中有两个分组:(\S+) 和 (\S+\.\S+) 
match_obj = re.search(r'(\S+)@(\S+\.\S+)', text)
if match_obj:
    print("完整邮箱:", match_obj.group()) # contact@example.com
    print("用户名:", match_obj.group(1)) # contact 
    print("域名:", match_obj.group(2)) # example.com 
    print("所有分组:", match_obj.groups()) # ('contact', 'example.com')

注意事项

re.match()的区别 :这是最关键的一点。re.match()只检查字符串的起始位置 是否符合模式,而 re.search()会扫描整个字符串

python 复制代码
import re 
line = "Dog is the best friend of humans" 
match_result = re.match(r'best', line) # 从开头匹配"best",失败 
search_result = re.search(r'best', line) # 在整个字符串中搜索"best",成功

(2)re.findall()函数

用于查找所有 符合正则表达式的子串,,并返回所有与指定模式匹配的非重叠子串组成的列表
基本语法 :​ | re.search(pattern, string, flags=0) |
返回值 :一个列表(list)。如果找到匹配项,列表包含所有匹配的子串;如果未找到,则返回空列表 []
re.findall()函数包含三个主要参数 :(与re.search()函数是一致的)

  • **pattern** (必选):一个字符串,代表你要匹配的正则表达式规则,例如 r"\d+"表示匹配一个或多个数字。
  • **string** (必选):待搜索的目标字符串。
  • **flags** (可选):用于控制匹配方式的标志,例如忽略大小写、多行模式等。这是一个可选参数,默认为0。常用的标志有:
    • re.I/ re.IGNORECASE: 忽略大小写 。
    • re.M/ re.MULTILINE: 影响 ^$的行为,使它们匹配每一行的开头和结尾 。
    • re.S/ re.DOTALL: 使点号 .匹配包括换行符在内的所有字符 。

基本查找

python 复制代码
#查找字符串中的所有数字
import re text = "我的电话是123,你的电话是456。" 
result = re.findall(r'\d+', text) 
print(result) # 输出:['123', '456']

使用分组提取内容

python 复制代码
#当正则表达式中包含圆括号 `()`分组时,`re.findall()`会优先返回分组捕获的内容,而不是整个匹配的内容
import re 
text = "请联系support@example.com或info@domain.org" 
# 模式中有分组,只提取@后面的域名部分 
result = re.findall(r'\w+@([\w.]+)', text) 
print(result) # 输出:['example.com', 'domain.org']

使用标志位(flags)

使用 flags=re.I来忽略英文字母的大小写

python 复制代码
import re 
text = "Hello HELLO hello" 
result = re.findall(r'hello', text, flags=re.IGNORECASE) 
print(result) # 输出:['Hello', 'HELLO', 'hello']

处理大量数据:re.finditer()

如果需要处理非常长的文本,re.finditer()是更好的选择。它不会一次性返回所有结果,而是返回一个迭代器(iterator),逐个产生匹配对象,从而节省内存

python 复制代码
import re 
text = "数字有123和456还有789。" # 使用finditer逐个处理匹配项 
for match in re.finditer(r'\d+', text): 
    print(f"找到数字: {match.group()},位置在: {match.span()}") 
    # 输出: 
    # 找到数字: 123,位置在: (3, 6) 
    # 找到数字: 456,位置在: (7, 10) 
    # 找到数字: 789,位置在: (11, 14)
相关推荐
大模型教程19 小时前
2025年AI大模型开发生态白皮书|附123页PDF文件下载
程序员·llm·agent
大模型教程19 小时前
2025年企业级AI Agent(智能体)价值及应用报告|附77页PDF文件下载
程序员·llm·agent
京东云开发者19 小时前
【A/B实验常见问题】实验异常值应该如何处理?
程序员
AI大模型19 小时前
工程师学AI之起始篇:理论与实践学习计划
程序员·llm·agent
AI大模型20 小时前
工程师学AI之第二篇:AI大模型vs数学理论
程序员·llm·agent
炫饭第一名1 天前
前端玩转 AI 应用开发|30行代码实现聊天机器人🤖
前端·人工智能·程序员
晴殇i1 天前
前端工程化核心知识全面解析
前端·程序员