首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python 3:使用正则表达式,将Windows文件路径列表为在特定位置有数字的字符串

Python 3:使用正则表达式,将Windows文件路径列表为在特定位置有数字的字符串
EN

Stack Overflow用户
提问于 2018-06-29 02:58:21
回答 3查看 328关注 0票数 -1

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

代码语言:javascript
复制
["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"]

路径是使用变量构建的,所以我没有声明原始字符串,我只能访问结果字符串和两者的连接:

代码语言:javascript
复制
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“匹配的所有字符串,因此给出以下结果:

代码语言:javascript
复制
["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)),但由于使用了双反斜杠,我无法让它工作。我还相应地更新了示例。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-29 02:59:58

代码语言:javascript
复制
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将正确地处理斜杠,因此在模式的该部分中没有正则表达式元字符,并且它是逐字匹配的。

票数 3
EN

Stack Overflow用户

发布于 2018-06-29 03:02:27

你可以使用一种理解:

代码语言:javascript
复制
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']
票数 2
EN

Stack Overflow用户

发布于 2018-06-29 03:21:53

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

代码语言:javascript
复制
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'] 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51089650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档