Python3:使用正则表达式将Windows文件路径列表为字符串,在特定位置有一个数字

Python3:使用正则表达式将Windows文件路径列表为字符串,在特定位置有一个数字,python,regex,string,python-3.x,Python,Regex,String,Python 3.x,我有一个按以下模式编写的Windows文件路径列表: ["C:\\folder\\a-file-001.jpg", "C:\\folder\\a-file-010.jpg", "C:\\folder\\a-file-bigger-001.jpg", "C:\\folder\\a-file-bigger-010.jpg"] 路径是使用变量构建的,因此我不声明原始字符串,我只能访问结果字符串以及两者的串联: path = "C:\\folder\\" name = "a-file" file_nu

我有一个按以下模式编写的Windows文件路径列表:

["C:\\folder\\a-file-001.jpg", "C:\\folder\\a-file-010.jpg", "C:\\folder\\a-file-bigger-001.jpg", "C:\\folder\\a-file-bigger-010.jpg"]
路径是使用变量构建的,因此我不声明原始字符串,我只能访问结果字符串以及两者的串联:

path = "C:\\folder\\"
name = "a-file"
file_number = "001"
full_path = path + name + "-" + file_number + ".jpg"
#"C:\\folder\\a-file-001.jpg"
#Only path, name and file_number variables are accessible to me, I don't declare those strings
我想使用regex查找与模式“a-file-XXX.jpg”匹配的所有字符串,因此给出以下结果:

["C:\\folder\\a-file-001.jpg", "C:\\folder\\a-file-010.jpg"]
我想我应该使用
过滤器(r.match,list)
来做这件事,但我找不到如何做

编辑:我的问题似乎不仅仅是过滤器,还有我试图比较的字符串:它们是Windows路径,我不知道双反斜杠在Python中需要特殊处理

在尝试了上一个示例后,我明白应该使用
list(filter(re.compile(path+name+“-\d{3}.jpg”).match(full_path))
,但由于使用了双反斜杠,我无法使其工作。我也相应地更新了示例

import re

strings = ["C:\\folder\\a-file-001.jpg",
           "C:\\folder\\a-file-010.jpg",
           "C:\\folder\\a-file-bigger-001.jpg",
           "C:\\folder\\a-file-bigger-010.jpg"]

path = "C:\\folder\\"
name = "a-file"
regex = re.compile(re.escape(path + name) + "-\d{3}.jpg")
print(list(filter(regex.match, strings)))

re.escape
将正确处理斜杠,以便在模式的该部分中没有正则表达式元字符,并且它是逐字匹配的。

您可以使用理解:

l = ["A-string-001", "A-string-010", "A-string-bigger-001", "A-string-bigger-010"]
import re
pattern = re.compile("A-string-\d+")
l = [x for x in l if pattern.match(x)]
l
['A-string-001', 'A-string-010']

您可以加入列表以获取一个长字符串,然后使用
re.findall
获取与模式
r'a-string-\d+'匹配的所有字符串。

import re
strings = ["A-string-001", "A-string-010", "A-string-bigger-001", "A-string-bigger-010"]
re.findall(r'A-string-\d+', "".join(strings))
# ['A-string-001', 'A-string-010'] 

您尝试过什么?使用
A-string-\d+
很容易做到这一点。您可能只想使用
\d+
,因为没有迹象表明字符串将始终有3位数字。@emsimpson92在我的情况下,字符串将始终有3位数字,然后使用
\d{3}
而不是
\d\d\d
这对你来说应该很有效。
\d+
\d*
\d\d\d
\d{3}
都能实现你的目标。您好,我发现这个过滤器有效,但我的问题更大。我用新信息更新了这个问题。谢谢。