【问题标题】:python glob to match a wider rangepython glob匹配更广泛的范围
【发布时间】:2020-05-10 10:12:20
【问题描述】:

尝试匹配磁盘上以 .asm、ASM 或某些 1/2/3 位扩展名(如 - .asm.1/.asm.11)结尾的文件

我的python代码是-

asmFiles = glob.glob('*.asm') + glob.glob('*.ASM') + glob.glob('*.asm.[0-9]') + glob.glob('*.ASM.[0-9]')

如何匹配文件 '.asm.11',因为我的代码只能匹配前三个?

谢谢

【问题讨论】:

  • 试试 `glob.glob('.asm.[0-9]')
  • this thread 用正则表达式解决这个问题。

标签: python range wildcard glob


【解决方案1】:

这是一个使用 Python 正则表达式和列表理解的解决方案:

import re

files = ['foobar.asm', 'foobar.ASM', 'foobar.asm.1', 'foobar.ASM.11', 'foobarasm.csv']

asm_pattern = '\.(asm|ASM)$|(asm|ASM)\.[1-9]$|\.(asm|ASM)\.[1-9][1-9]$'

asmFiles = [f for f in files if re.search(asm_pattern, f)]

[print(asmFile) for asmFile in asmFiles]

列表文件中的最后一个元素是我考虑测试搜索模式的边缘案例。正如预期的那样,它没有出现在结果中。

【讨论】: