【问题标题】:Find an alternating (letter or number) + letter pattern in a file name在文件名中查找交替(字母或数字)+字母模式
【发布时间】: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 :: 无

最好的问候

【问题讨论】:

    标签: python regex


    【解决方案1】:

    quantified group 中使用character classes 怎么样。

    (?i)(?:[2-9AJKQT][hscd]){3}
    

    See this demo at regex101this Python demo

    对于 caseless 匹配使用 (?i) flagre.IGNORECASE


    仔细查看您的代码,进一步了解order, arguments are passed in re.findall

     re.findall(pattern, string, flags=0)
    

    未来的另一个想法可能是,考虑一般将raw string notation 用于正则表达式模式,但这不是您当前模式的问题。

    【讨论】:

    • 应该不区分大小写,所以在开头加上(?i)
    • @ekhumoroyes 是的,你在开头使用内联标志或re.IGNORECASE
    • @ekhumoro 哎呀,我以为你是 OP :) 也感谢 toolic 的建议。我在发布答案时忽略了不敏感的部分!
    • 嘿,该模式完全符合它在 regex101 中需要做的事情。我认为它必须在我的代码中。如果我使用 re.search 我会得到一个空列表,如果我使用 re.findall 我会得到 None 回来。 re_pattern = "(?i)(?:[2-9AJKQT][hscd]){3}" board_id = re.search(item, re_pattern) print(f"{item} :: {board_id}") As6d5d BTN 2.5x vs BB.txt :: 无 SRP 3x 5h6d3c.txt :: 无
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    相关资源
    最近更新 更多