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

如何编写正则表达式匹配字符串中.tar.gz后缀的文件名?

提取后缀为tar.gz的文件名

原始目标字符串

56451   -rw-                1  Aug 10 2023 08:54:53 +00:00  .callhome
56482   -rw-            14846   Jul 4 2023 23:02:34 +00:00  Router-system-report_20230704-230220-UTC-info.txt
56481   -rw-         68333650   Jul 4 2023 23:02:28 +00:00  Router-system-report_20230704-230220-UTC.tar.gz
233859  -rw-             9508   Jul 4 2023 17:47:54 +00:00  Router-system-report_20230704-174745-UTC-info.txt
56480   -rw-         61744940   Jul 4 2023 17:47:48 +00:00  Router-
56450   drwx             4096  Jun 18 2023 06:17:45 +00:00  modules

问题分析

你之前用的代码:

matches = re.finditer("(\w+)\s+(\d+)", file_string)
for match in matches:
    filenames.append(match.group(1))

其中正则(\w+)\s+(\d+)匹配的是字母数字组合加空格加数字的片段,完全没触碰到每行末尾的文件名区域,自然拿不到目标的.tar.gz文件。

解决方案

可以用以下两种正则方案提取目标文件名:

方案1:通用匹配任意位置的.tar.gz文件

import re

file_string = """56451   -rw-                1  Aug 10 2023 08:54:53 +00:00  .callhome
56482   -rw-            14846   Jul 4 2023 23:02:34 +00:00  Router-system-report_20230704-230220-UTC-info.txt
56481   -rw-         68333650   Jul 4 2023 23:02:28 +00:00  Router-system-report_20230704-230220-UTC.tar.gz
233859  -rw-             9508   Jul 4 2023 17:47:54 +00:00  Router-system-report_20230704-174745-UTC-info.txt
56480   -rw-         61744940   Jul 4 2023 17:47:48 +00:00  Router-
56450   drwx             4096  Jun 18 2023 06:17:45 +00:00  modules"""

filenames = []
# 匹配任意非空白字符组成的、以.tar.gz结尾的文件名
matches = re.finditer(r"\b(\S+\.tar\.gz)\b", file_string)
for match in matches:
    filenames.append(match.group(1))

print(filenames)
# 输出: ['Router-system-report_20230704-230220-UTC.tar.gz']

方案2:精准匹配每行末尾的.tar.gz文件(贴合ls输出格式)

import re

filenames = []
# 启用多行模式,匹配每行末尾、前面带空格的.tar.gz文件名
matches = re.finditer(r"\s+(\S+\.tar\.gz)$", file_string, re.MULTILINE)
for match in matches:
    filenames.append(match.group(1))

print(filenames)
# 输出: ['Router-system-report_20230704-230220-UTC.tar.gz']

正则规则说明

  • \S+:匹配1个及以上非空白字符,覆盖文件名中的连字符、下划线等特殊符号
  • \.tar\.gz:转义.匹配实际的点号,精准锁定后缀
  • \b:单词边界,避免匹配包含.tar.gz的更长字符串
  • $ + re.MULTILINE:在多行模式下,$匹配每行的末尾,确保只提取行尾的文件名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:15:24