使用re.search()
查找并返回字符串中的文件扩展名的正确正则表达式语句是什么。
如:
(.+).(avi|rar|zip|txt)
我需要它来搜索字符串,如果它包含任何avi,rar等)只返回该扩展名。
谢谢!
编辑:应该添加需要不区分大小写的
答案 0 :(得分:8)
标准库更好;)
>>> os.path.splitext('hello.py')
('hello', '.py')
答案 1 :(得分:6)
你需要:
(.)\.(avi|rar|zip|txt)$
注意反斜杠以逃避点。这将使它找到一个文字点而不是任何字符。
要使其不区分大小写,请在search来电中使用RE.I标记。
re.search(r'(.)\.(avi|rar|zip|txt)$', string, re.I)
答案 2 :(得分:1)
短交互式运行:
>>> import re
>>> pat="(.+)\.(avi|rar|zip|txt)"
>>> re.search(pat, "abcdefg.zip", re.IGNORECASE).groups()
('abcdefg', 'zip')
>>> re.search(pat, "abcdefg.ZIP", re.IGNORECASE).groups()
('abcdefg', 'ZIP')
>>>
答案 3 :(得分:0)
(.+)[.](avi|rar|zip|txt)
然后第2组将是扩展名。
我刚刚写了一篇关于正则表达式的博客 http://blogs.appframe.com/erikv/2010-09-23-Regular-Expression 如果你想了解更多相关信息。
答案 4 :(得分:0)
因为我认为正则表达式是邪恶的......
def return_extension(filename):
'''(This functions assumes that filenames such as `.foo` have extension
`foo`.)
'''
tokens = filename.split('.')
return '' if len(tokens) == 1 else tokens[-1]
...我主张简单地解析文件名。
答案 5 :(得分:0)
如果您知道扩展名位于字符串的最后,那么这应该可以正常工作:
.\.(avi|rar|zip|txt)$
第一位将确保点之前有一些字符。
$
指定文件扩展名位于字符串的末尾,即$
表示“字符串在此处结束”。有关这方面的详细信息,包括您应该注意的一些带有换行符的边缘案例,请参阅JoshD's answer的评论讨论,以及docs中$
的条目。
那么match.groups()
元组中唯一的条目,即match.groups()[0]
,将是扩展本身。