python正则表达式问题

时间:2010-10-11 17:55:05

标签: python regex

使用re.search()查找并返回字符串中的文件扩展名的正确正则表达式语句是什么。

如: (.+).(avi|rar|zip|txt)

我需要它来搜索字符串,如果它包含任何avi,rar等)只返回该扩展名。

谢谢!

编辑:应该添加需要不区分大小写的

6 个答案:

答案 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],将是扩展本身。