我试图找到一个文件的扩展名,给它的名字作为字符串.我知道我可以使用的功能os.path.splitext,但它并不按预期的情况下,我的文件扩展名是.tar.gz或.tar.bz2因为它提供了扩展的gz和bz2,而不是tar.gz和tar.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'
Run Code Online (Sandbox Code Playgroud)
我正在使用(?P<ext>...)我的模式匹配,因为我也希望得到扩展名.
请帮忙.
phi*_*hag 15
root,ext = os.path.splitext('a.tar.gz')
if ext in ['.gz', '.bz2']:
ext = os.path.splitext(root)[1] + ext
Run Code Online (Sandbox Code Playgroud)
有些人在面对问题时会想"我知道,我会使用正则表达式".现在他们有两个问题.
>>> print re.compile(r'^.*[.](?P<ext>tar\.gz|tar\.bz2|\w+)$').match('a.tar.gz').group('ext')
gz
>>> print re.compile(r'^.*?[.](?P<ext>tar\.gz|tar\.bz2|\w+)$').match('a.tar.gz').group('ext')
tar.gz
>>>
Run Code Online (Sandbox Code Playgroud)
?运算符试图找到最小匹配项,所以也不要使用。*来代替“ * .tar”。查找允许.tar.gz匹配的最小匹配。