python正则表达式匹配文件名

2024-06-17 09:01:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下文件名,并希望将其分组:

第1组:

C7_S6_L001.sorted.bam
C7_S6_L002.sorted.bam
C7_S6_L003.sorted.bam
C7_S6_L004.sorted.bam

第2组:

CL3_S8_L001.sorted.bam
CL3_S8_L002.sorted.bam
CL3_S8_L003.sorted.bam
CL3_S8_L004.sorted.bam

第3组:

CL5-B1_S4_L001.sorted.bam
CL5-B1_S4_L002.sorted.bam
CL5-B1_S4_L003.sorted.bam
CL5-B1_S4_L004.sorted.bam

正则表达式如何查找它?你知道吗

先谢谢你。你知道吗


Tags: 文件名s4b1sorteds6bamc7s8
1条回答
网友
1楼 · 发布于 2024-06-17 09:01:24

假设分组键在_L之前和文件名开头的数字,您可以使用以下正则表达式来使用saving groups捕获组键:

([A-Z0-9-_]+)_L\d{3}\.sorted\.bam

使用^{} collection的工作示例:

from collections import defaultdict
from pprint import pprint
import re

filenames = [
    "C7_S6_L001.sorted.bam",
    "C7_S6_L002.sorted.bam",
    "C7_S6_L003.sorted.bam",
    "C7_S6_L004.sorted.bam",

    "CL3_S8_L001.sorted.bam",
    "CL3_S8_L002.sorted.bam",
    "CL3_S8_L003.sorted.bam",
    "CL3_S8_L004.sorted.bam",

    "CL5-B1_S4_L001.sorted.bam",
    "CL5-B1_S4_L002.sorted.bam",
    "CL5-B1_S4_L003.sorted.bam",
    "CL5-B1_S4_L004.sorted.bam"
]

pattern = re.compile(r"([A-Z0-9-_]+)_L\d{3}\.sorted\.bam")
grouped = defaultdict(list)

for filename in filenames:
    match = pattern.search(filename)
    if match:
        key = match.group(1)
        grouped[key].append(filename)

pprint(grouped)

印刷品:

defaultdict(<class 'list'>,
            {'C7_S6': ['C7_S6_L001.sorted.bam',
                       'C7_S6_L002.sorted.bam',
                       'C7_S6_L003.sorted.bam',
                       'C7_S6_L004.sorted.bam'],
             'CL3_S8': ['CL3_S8_L001.sorted.bam',
                        'CL3_S8_L002.sorted.bam',
                        'CL3_S8_L003.sorted.bam',
                        'CL3_S8_L004.sorted.bam'],
             'CL5-B1_S4': ['CL5-B1_S4_L001.sorted.bam',
                           'CL5-B1_S4_L002.sorted.bam',
                           'CL5-B1_S4_L003.sorted.bam',
                           'CL5-B1_S4_L004.sorted.bam']})

相关问题 更多 >