You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.7多正则匹配结果无法同时打印,仅输出单个匹配问题

问题分析与修复

原代码的核心错误

  1. 正则匹配语法错误:re.match的参数传递错误,你把目标字符串items[2]写到了正则模式的引号里,导致正则会把items[2]当成匹配规则的一部分,根本不会去匹配实际的文件名。正确写法是将正则模式和目标字符串分开传参。
  2. 逻辑判断矛盾:单个文件不可能同时是.txt和.csv后缀,所以if t is not None and c is not None这个条件永远不会成立,自然没有输出。
  3. 输出语句错误:print(t.group() and c.group())是逻辑运算,不是输出两个结果,就算条件成立,也只会返回其中一个值,无法同时输出两个文件。

修复后的代码

如果你的场景是遍历每个文件对应的obj.key,可以用以下代码:

import re

# 假设file是当前处理的文件名,obj.key是包含文件路径的字符串
items = obj.key.split("/")
# 确保拆分后至少有3个元素,且items[2]就是当前文件名
if len(items) >= 3 and items[2] == file:
    # 匹配目标txt文件,$确保后缀在结尾,\.转义点避免匹配任意字符
    txt_match = re.match(r".*_t_a_n_a\.txt$", items[2])
    # 匹配目标csv文件
    csv_match = re.match(r".*_t_a_n_a\.csv$", items[2])
    
    # 匹配到哪个就输出哪个
    if txt_match:
        print(txt_match.group())
    if csv_match:
        print(csv_match.group())

如果是直接处理文件名列表,更简洁的写法:

import re

# 你的文件名列表
file_list = [
    "00-0000-aa_S6_t_a_a.txt",
    "00-0000-aa_S6_t_a_n_a.csv",
    "00-0000-aa_S6_t_a_n_a.txt",
    "00-0000-aa_S6_t_a_n_m_a.txt",
    "00-0000-aa_S6_t_a_s_a.csv"
]

# 用一个正则匹配两种后缀
target_pattern = re.compile(r".*_t_a_n_a\.(txt|csv)$")
for filename in file_list:
    match = target_pattern.match(filename)
    if match:
        print(match.group())

输出结果

运行后会得到你想要的:

00-0000-aa_S6_t_a_n_a.csv
00-0000-aa_S6_t_a_n_a.txt

内容的提问来源于stack exchange,提问作者justaguy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:33:16