我有一个文件名10.10.10.17_super-micro-100-13.txt
,我需要在_
和.
之间提取所有内容。例如,在这种情况下,它将返回super-micro-100-13
我需要一个Python正则表达式才能完成任务。如果我做
re.compile('\_(.*)\.)
,我得_super-micro-100-13.
这不是我想要的。在这种情况下,任何人都可以对正确的正则表达式有所了解吗?
谢谢, 尼尔
答案 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]