python - 在python中使用模式匹配获取文件扩展名

标签 python regex

我试图找到一个文件的扩展名,它的名字是一个字符串。我知道我可以使用函数 os.path.splitext但如果我的文件扩展名是 .tar.gz,它不会按预期工作或 .tar.bz2因为它给出了扩展名 gzbz2而不是 tar.gztar.bz2分别。
所以我决定自己使用模式匹配来查找文件的扩展名。

print re.compile(r'^.*[.](?P<ext>tar\.gz|tar\.bz2|\w+)$').match('a.tar.gz')group('ext')
>>> gz            # I want this to come as 'tar.gz'
print re.compile(r'^.*[.](?P<ext>tar\.gz|tar\.bz2|\w+)$').match('a.tar.bz2')group('ext')
>>> bz2           # I want this to come 'tar.bz2'

我正在使用 (?P<ext>...)在我的模式匹配中,因为我也想获得扩展名。

请帮忙。

最佳答案

root,ext = os.path.splitext('a.tar.gz')
if ext in ['.gz', '.bz2']:
   ext = os.path.splitext(root)[1] + ext

<子> 有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。

关于python - 在python中使用模式匹配获取文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6525334/

相关文章:

python - 无限猴子定理 : Maximum Recursion Depth exceeded

python - Pandas 数据框的最大值和最小值

python - % 增加数值记录

python - Numpy:使用池多重处理矩阵乘法

仅当行以特定条件开头时,行内的正则表达式匹配模式

mysql - 根据另一列查询 mysql 中的 REGEX_REPLACE

java - 匹配器找到一个模式,但抛出 No match available on `start` 方法

python - 如何将多个语句放在一行中?

javascript正则表达式用链接替换一些单词,但不在现有链接中

javascript - 如何在 Node JS 中执行正则表达式匹配?