首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在文件名中找到交替的(字母或数字)+字母模式

在文件名中找到交替的(字母或数字)+字母模式
EN

Stack Overflow用户
提问于 2019-11-20 15:06:14
回答 1查看 81关注 0票数 5

从以下文件名列表中,我试图检索突出显示的部分:

  • Ah6d8c.txt之类的东西
  • Qd6h7s.txt
  • somethingAcKhJssomething.txt
  • 7h6c8c something.txt

其模式是:

  • 6个字符长
  • 以2-9或A K q J T开头,上下大写
  • 第二个字符总是h_s_c_ d,小写和大写。
  • 第三和第四场比赛第一场和第二场
  • 第五次和第六次相同
代码语言:javascript
复制
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成为字典键,并使整个路径的值。

编辑改进的模式如下所示:

代码语言:javascript
复制
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对BB.txt ::无
  • SRP3x 5h6d3c.txt ::无

诚挚的问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-20 15:13:02

如何在字符类中使用数量化

代码语言:javascript
复制
(?i)(?:[2-9AJKQT][hscd]){3}

在regex101上看到这个演示这个Python演示

对于无实例匹配,请使用(?i)标志re.IGNORECASE

仔细查看您的代码,进一步了解re.findall

代码语言:javascript
复制
 re.findall(pattern, string, flags=0)

对于未来的另一个想法,它可能进一步考虑,一般考虑使用原始字符串表示法的regex模式,但这不是一个问题,您的当前模式。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58957479

复制
相关文章

相似问题

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