我有一个按以下模式编写的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
我想使用正则表达式来查找与模式"a-file-XXX.jpg“匹配的所有字符串,因此给出以下结果:
["C:\\folder\\a-file-001.jpg", "C:\\folder\\a-file-010.jpg"]
我想我应该使用filter(r.match, list)
来做这件事,但是我不知道怎么做。
编辑:似乎我的问题不仅仅是过滤器,还有我试图比较的字符串:它们是Windows路径,我不知道双反斜杠在Python语言中需要特殊处理。
在尝试了前面的示例之后,我知道我应该使用list(filter(re.compile(path + name + "-\d{3}.jpg").match(full_path))
,但由于使用了双反斜杠,我无法让它工作。我还相应地更新了示例。
发布于 2018-06-29 02:59:58
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
将正确地处理斜杠,因此在模式的该部分中没有正则表达式元字符,并且它是逐字匹配的。
发布于 2018-06-29 03:02:27
你可以使用一种理解:
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']
发布于 2018-06-29 03:21:53
您可以加入列表以获取一个长字符串,然后使用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']
https://stackoverflow.com/questions/51089650
复制相似问题