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

Python正则表达式文件名前后通配符搜索报错求助

解决文件名任意位置字符串匹配的问题

报错原因

你遇到的re.error: nothing to repeat at position 0是因为正则表达式中的*是量词,必须跟在某个字符、分组或字符类之后(比如a*表示匹配0个或多个a),直接以*开头的正则没有可重复的前置元素,因此触发语法错误。

你之前的代码redeemed = redeemed + "*"能运行是因为前面有具体字符串,但这其实不是正确的通配符用法——它只会让正则匹配redeemed末尾字符的重复(比如输入File A会生成File A*,实际匹配File A、File AA等,而非包含File A的任意文件名)。

正确实现方案

你的需求是匹配包含指定字符串的任意文件名(目标字符串出现在文件名任意位置即可),有两种简单可靠的实现方式:

方法1:用fnmatch实现通配符匹配(推荐)

fnmatch是Python内置模块,专门处理shell风格的通配符,完全符合你对*作为通配符的预期:

import fnmatch

# 构建通配符模式:前后加*表示任意位置包含目标字符串
match_pattern = f"*{redeemed}*"
# 筛选匹配的文件名
results = [file for file in sounds if fnmatch.fnmatch(file, match_pattern)]

这个方法不需要处理特殊字符,*直接代表任意长度的任意字符,逻辑直观,不会有正则语法的坑。

方法2:用正则表达式实现

如果需要更复杂的匹配逻辑(比如带正则语法的模糊搜索),可以用re模块,但需要先转义输入字符串避免正则特殊字符干扰:

import re

# 转义输入字符串,处理.、+、?等正则特殊字符
escaped_keyword = re.escape(redeemed)
# re.search会自动在整个文件名中查找匹配的子串,无需额外加通配符
results = [file for file in sounds if re.search(escaped_keyword, file)]

注:如果一定要手动模拟通配符,也可以写pattern = f".*{escaped_keyword}.*",但re.search本身已支持任意位置匹配,这步是多余的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 10:39:16