Python:RegEx帮助

时间:2012-03-19 18:13:25

标签: python regex

我有一个文件名10.10.10.17_super-micro-100-13.txt,我需要在_.之间提取所有内容。例如,在这种情况下,它将返回super-micro-100-13

我需要一个Python正则表达式才能完成任务。如果我做 re.compile('\_(.*)\.),我得_super-micro-100-13.这不是我想要的。在这种情况下,任何人都可以对正确的正则表达式有所了解吗?

谢谢, 尼尔

4 个答案:

答案 0 :(得分:2)

如果您决定不需要使用正则表达式,那么将几个字符串方法放在一起就更具可读性。

file_name = "10.10.10.17_super-micro-100-13.txt"
print file_name.split("_")[1].split(".")[0]

答案 1 :(得分:1)

试试这个:

import re
name = '10.10.10.17_super-micro-100-13.txt'
regex = re.compile(r'.+_(.+)\.txt')
regex.match(name).group(1)
> 'super-micro-100-13'

答案 2 :(得分:1)

您可以使用lookbehind和lookahead,这样您实际上只匹配您想要的部分。另请注意,您需要在末尾转义.以匹配文字点。

以下是您可以使用的正则表达式:

regex = re.compile(r'(?<=_).*(?=\.)')

或者,您可以使用当前的正则表达式并从匹配中拉出第一个捕获组:

regex = re.compile(r'_(.*)\.')
print regex.search('10.10.10.17_super-micro-100-13.txt').group(1)
# super-micro-100-13

答案 3 :(得分:1)

我认为正则表达式有点矫枉过正。您可以使用“查找”功能,如下所示:

def extract_info(s):
    underscore = s.find('_')
    dot = s.find('_', underscore) //you only want a dot after the underscore
    return s[underscore:dot]