【发布时间】:2019-11-20 15:06:14
【问题描述】:
我正在尝试从以下文件名列表中检索突出显示的部分:
- 某事Ah6d8c.txt
- 东西 Qd6h7s.txt
- somethingAcKhJssomething.txt
- 7h6c8c something.txt
模式是:
- 6 个字符长
- 以 2-9 或 A K Q J T 开头,小写和大写都可以
- 第二个字符总是 h s c d,小写和大写都可以
- 第三和第四匹配第一和第二
- 第五和第六相同
import os
import re
root = "C:/root"
data = dict()
re_pattern = "[a-zA-Z|2-9][h|s|c|d][a-zA-Z|2-9][h|s|c|d][a-zA-Z|2-9][h|s|c|d]"
for folder in os.listdir(root):
data[folder] = dict()
for item in os.listdir(f"{root}/{folder}"):
board_id = re.findall(item, re_pattern)
print(board_id)
data[folder][item] = f"{root}/{folder}/{item}"
我认为我的正则表达式可以工作,但它找到了一个空列表。我的正则表达式或我的代码错了吗?目标是让 board_id 成为字典键,值成为整个路径。
编辑 改进后的模式如下:
import os
import re
root = "C:/root"
data = dict()
re_pattern = "(?i)(?:[2-9AJKQT][hscd]){3}"
for folder in os.listdir(root):
data[folder] = dict()
for item in os.listdir(f"{root}/{folder}"):
board_id = re.search(item, re_pattern)
print(f"{item} :: {board_id}")
data[folder][item] = f"{root}/{folder}/{item}"
结果还是不对,必须在代码中代替:
- As6d5d BTN 2.5x vs BB.txt :: 无
- SRP 3x 5h6d3c.txt :: 无
最好的问候
【问题讨论】: