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

如何在Python中精准匹配文件名中的独立指定数字字符串?

匹配文件名中的独立数字

我有一个文件夹,其中每个文件均以数字命名(如img 1、img 2、img-3、4-img等)。需要根据精确的字符串获取文件,例如输入'4'时,仅返回包含**独立'4'**的文件,而非包含'14'或'40'的文件。目前程序会返回所有包含目标字符串的文件,且数字在文件名中的位置不固定(有的在末尾,有的在中间)。

示例

文件夹文件列表:

['ep 4', 'xxx 3 ', 'img4', '4xxx', 'ep-40', 'file.mp4', 'file 4.mp4', 'ep.4.', 'ep.4 ', 'ep. 4. ', 'ep4xxx', 'ep 4 ', '404ep']

期望返回的MP4文件(仅包含独立数字4):

['ep 4', 'img4', '4xxx','file 4.mp4','ep.4.','ep.4 ', 'ep. 4. ', 'ep4xxx','ep 4 ', '404ep']

当前代码

import os

source_folder = "你的文件夹路径"
for (root, dirs, file) in os.walk(source_folder):
    for f in file:
        if '.mp4' and ('4') in f:
            print(f)

尝试用==替代in,仍未解决问题。


解决方案

要匹配独立的数字4,核心是确保4的前后不是其他数字。可以用正则表达式来实现:

方法1:使用单词边界\b

\b匹配单词字符(字母、数字、下划线)与非单词字符的边界,能精准定位独立的4:

  • 4在开头且前无数字(如4xxx)
  • 4在结尾且后无数字(如ep 4)
  • 4在中间且前后非数字(如ep.4.)

修改后的代码:

import os
import re

target_num = '4'
source_folder = "你的文件夹路径"

# 构建正则:匹配独立的目标数字
pattern = re.compile(rf'\b{target_num}\b')

for root, dirs, files in os.walk(source_folder):
    for f in files:
        # 先判断是MP4文件,再检查是否包含独立数字
        if f.endswith('.mp4') and pattern.search(f):
            print(f)

方法2:使用负向断言(适配下划线场景)

如果文件名存在下划线(如ep_4),\b会将下划线视为单词字符,此时用负向断言确保4的前后不是数字:

import os
import re

target_num = '4'
source_folder = "你的文件夹路径"

# 正则含义:4的前面是字符串开头/非数字,后面是字符串结尾/非数字
pattern = re.compile(rf'(?:^|\D){target_num}(?:\D|$)')

for root, dirs, files in os.walk(source_folder):
    for f in files:
        if f.endswith('.mp4') and pattern.search(f):
            print(f)

问题说明

原代码的if '.mp4' and ('4') in f逻辑错误:'.mp4'是恒为True的布尔值,等同于只判断'4' in f,所以会返回所有包含4的MP4文件,不管是不是独立的。用==完全不符合需求,因为它是判断文件名完全等于'4'。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:55:19