2015-04-07 49 views
0

我试图从以下字符串的文件名:得到两个空间之间的一切,包括词干

s = '[download] /tmp/743979_file.mp4 has already been downloaded' 

这是我到目前为止有:

>>> re.search(r'(\s).+_file[^\s]+', s).group() 
' /tmp/743979_file.mp4' 

我将如何获得第一个空格之后,第二个空格之前的所有内容,其中包含字_file

回答

2

使用\S来匹配任何非空格字符。因此\S*将匹配零个或多个非空格字符。 \s只是与\S相反,其中\s与任何类型的空格字符匹配,\S匹配任何类型的非空格字符。

>>> s = '[download] /tmp/743979_file.mp4 has already been downloaded' 
>>> re.search(r'(?<=\s)\S*_file\S*', s).group() 
'/tmp/743979_file.mp4' 

OR

简单,

>>> re.search(r'\S*_file\S*', s).group() 
'/tmp/743979_file.mp4' 

OR

>>> s = '[download] /tmp/743979_file.mp4 has already been downloaded' 
>>> m = s.split()[1] 
>>> if '_file' in m: 
     print(m) 


/tmp/743979_file.mp4 
+1

'\ s'和'\ S *'有什么区别? – David542

+0

'\ s'是空格,'\ S'是非空格,'*'表示0或更多前面的对象。 – TigerhawkT3

2

另一种简单的解决方案可以使用split

print '[download] /tmp/743979_file.mp4 has already been downloaded'.split()[1]