备忘: 避免Python正则表达式匹配结果为tuple

开发过程中碰到一个不小的坑,就是Python正则表达式匹配结果怎么也不正确,结果发现匹配本身问题不大,但输出居然是tuple导致程序异常

需求是在字符串中匹配不带文件路径的文件名,例如 请打开/home/pyTest_2024-02-28_16:11:22_88.py文件,需要匹配出pyTest_2024-02-28_16:11:22_88.py。

1 通过代码搜索的结果,提示在字符串中匹配文件可以这么干:

pattern1 = r"([^/\\]+)\.[^/\\]+$"
file_1 = re.findall(pattern1, message, re.DOTALL)[0]
print("文件路径是 %s" % str(file_1))

结果是
<class ‘str’>
文件路径是 pyTest_2024-02-28_16:11:22_88.py文件

很明显,没有限制文件后缀范围,那么把我需要的后缀(py|html|js)加到正则表达式

2 下一步

pattern2 = r"([^/\\]+)\.(py|html|js)"
file_1 = re.findall(pattern2, message, re.DOTALL)[0]
print("文件路径是 %s" % str(file_1))

但匹配的结果是tuple类型
<class ‘tuple’>
文件路径是 (‘pyTest_2024-02-28_16:11:22_88’, ‘py’)
导致了程序的异常

经翻阅资料python 正则表达式findall匹配问题

发现问题
在这里插入图片描述

pattern2 有两个括号,于是python就把两个匹配项匹配结果组成了tuple

知道了原因修改就很简单

pattern3 = r"[^/\\]+\.py|html|js"
file_1 = re.findall(pattern3, message, re.DOTALL)[0]
print("文件路径是 %s" % str(file_1))

<class ‘str’>
文件路径是 pyTest_2024-02-28_16:11:22_88.py

得到了需要的结果

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhyuli

您的鼓励是对我付出努力一种赞赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值