全局匹配麻烦

问题描述 投票:0回答:1

我无法找到与我的文件名匹配的全局模式。问题是文件名偶尔会有前缀。

它应该匹配的文件:

                   1_S1_L001_R1_001.fastq.gz
230101_N_N_100_100_1_S1_L001_R1_001.fastq.gz

不应匹配的文件:

                   11_S11_L001_R1_001.fastq.gz
230101_N_N_100_100_11_S11_L001_R1_001.fastq.gz

这个在在线测试器中工作,但在Python中不起作用:

+(*([!0-9])|*[!0-9])1_S*

glob
1个回答
0
投票

您可以尝试以下 glob 模式:

*_S[0-9][!0-9]*

在 Python 上验证:

import fnmatch

fnames = [
    '1_S1_L001_R1_001.fastq.gz',
    '230101_N_N_100_100_1_S1_L001_R1_001.fastq.gz',
    '11_S11_L001_R1_001.fastq.gz',
    '230101_N_N_100_100_11_S11_L001_R1_001.fastq.gz',
]
for fname in fnames:
    print(fname, fnmatch.fnmatch(fname, '*_S[0-9][!0-9]*'))

输出

1_S1_L001_R1_001.fastq.gz True
230101_N_N_100_100_1_S1_L001_R1_001.fastq.gz True
11_S11_L001_R1_001.fastq.gz False
230101_N_N_100_100_11_S11_L001_R1_001.fastq.gz False
© www.soinside.com 2019 - 2024. All rights reserved.