欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > # python正则表达式——实战学习+理论

# python正则表达式——实战学习+理论

2025/6/20 16:57:49 来源:https://blog.csdn.net/weixin_57253447/article/details/148768090  浏览:    关键词:# python正则表达式——实战学习+理论

python正则表达式

正则表达式是一种用于匹配字符串模式的工具。在 Python 中,re 库提供了正则表达式的支持。

1. 常用元字符
  • .:匹配任意单个字符(除了换行符)。
  • ^:匹配字符串的开头。
  • $:匹配字符串的结尾。
  • *:*匹配前面的字符 0 次或多次。
  • +:匹配前面的字符 1 次或多次。
  • ?:匹配前面的字符 0 次或 1 次。
  • {n}:匹配前面的字符恰好 n 次。
  • {n,}:匹配前面的字符至少 n 次。
  • {n,m}:匹配前面的字符至少 n 次,最多 m 次。
2. 字符类
  • [ ]:匹配方括号内的任意一个字符。
    • 例如:[abc] 匹配 abc
    • [a-z] 匹配任意小写字母。
    • [0-9] 匹配任意数字。
  • [^ ]:取反,匹配不在方括号内的任意字符。
3. 特殊字符类
  • \d:匹配任意数字,等价于 [0-9]
  • \D:匹配任意非数字,等价于 [^0-9]
  • \w:匹配任意字母、数字或下划线,等价于 [a-zA-Z0-9_]
  • \W:匹配任意非字母、数字或下划线,等价于 [^a-zA-Z0-9_]
  • \s:匹配任意空白字符(空格、制表符、换行符等)。
  • \S:匹配任意非空白字符。
4. 分组和引用
  • ( ):将括号内的内容作为一个分组,可以用于提取子匹配或应用量词。
  • \1, \2, …:引用前面的分组。

二、Python re 库的基本用法

re 库提供了多个核心函数,最常用的有:

1. re.search(pattern, string)
  • 作用:在字符串中搜索第一个匹配的模式。
  • 返回值:如果找到匹配,返回 Match 对象;否则返回 None

示例

import retext = "Hello, World!"
match = re.search(r"World", text)
if match:print("找到匹配:", match.group())  # 输出: 找到匹配: World
2. re.match(pattern, string)
  • 作用:从字符串的开头开始匹配模式。
  • 返回值:如果开头匹配,返回 Match 对象;否则返回 None

示例

match = re.match(r"Hello", text)  # 匹配成功
match = re.match(r"World", text)  # 匹配失败(不是从开头匹配)
3. re.findall(pattern, string)
  • 作用:查找字符串中所有匹配的模式。
  • 返回值:返回包含所有匹配的列表。

示例

text = "apple, banana, cherry"
matches = re.findall(r"\w+", text)
print(matches)  # 输出: ['apple', 'banana', 'cherry']
4. re.sub(pattern, repl, string)
  • 作用:替换字符串中所有匹配的模式。
  • 返回值:返回替换后的新字符串。

示例

text = "Hello, World!"
new_text = re.sub(r"World", "Python", text)
print(new_text)  # 输出: Hello, Python!

3. 实战问题解决

问题描述:

我有一个answer,里面的内容是一段推理的字符串。例如:

answer =1. 观察图片,找到.............。
在押人员中,穿红色马甲的人位于最前面。2. 检查在押人员后面是否有任何人,有就输出“false”,没有人就输出“true”。在押人员后面有穿黑色衣服的特保。3. 输出格式为:最终结果是 true 或 false。最终结果是 false。<|im_end|>

我想判断推理的最终结果,判断是True 还是 false, 但是文字中会有T 、F干扰。所以下面这种简单的方式 ×

pred = 1 if "true" in answer.lower() else 0 
y_true.append(label)
y_pred.append(pred)

要用正确的正则表达式求解。

解决思路:

直接匹配之后的一句话“r"最终结果是\s*(\w+)\s*。<\|im_end\|>$"

r"" : 转义 把里面的内容的符号都转义为正常的符号。 r代表:trope。

#使用正则表达式import repattern = r"最终结果是\s*(\w+)\s*。<\|im_end\|>$"match = re.search(pattern, answer)if match:result_text = match.group(1)pred = 1 if result_text.lower() == "true" else 0else:print(f"未能从图片{image_path}的答案中提取结果: {answer}")pred = 0

正则表达式的匹配模式解释

  • r"最终结果是\s*(\w+)\s*。<\|im_end\|>$"
    
    • \s*:匹配零个或多个空白字符。
    • (\w+):捕获一个或多个字母、数字或下划线(即 truefalse)。
    • 。<\|im_end\|>$:匹配结尾的 "。<|im_end|>"

五、正则表达式调试技巧

如果正则表达式不按预期工作,可以使用以下方法调试:

  1. 在线工具:推荐使用 regex101.com 测试和可视化正则表达式。

  2. 打印匹配结果:

    match = re.search(pattern, answer)
    if match:print("完整匹配:", match.group(0))print("分组1:", match.group(1))
    else:print("未找到匹配")
    

总结

通过正则表达式,你可以更灵活地从模型输出中提取结果。关键是理解:

  1. 正则表达式的基本语法(元字符、字符类、分组)。
  2. re.search() 用于查找匹配。
  3. 使用 group() 方法提取捕获的内容。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词