2011-04-29 36 views
2

的一部分,我想提取包含在一个XML字符串的文件名的一部分正则表达式来提取文件名

样品

<assets> 
<media width="100%" height="100%" img="/assets/560PEgnR/kVvNKfOX7w9tf7.JPG" valign="top"/> 
<media width="100%" height="100%" img="/assets/560PEgnR/kVvNKfOX7w9tf5.JPG" valign="top"/> 
<media width="100%" height="100%" img="/assets/560PEgnR/kVvNKfOX7w9tf4.JPG" valign="top"/> 
</assets> 

我想匹配和检索所有条目的560PEgnR部分无论文件名的

到目前为止,我有

/assets/(.*)/*" 

但它并不做我想做的

任何帮助表示赞赏

感谢

回答

3

你应该尝试:

/assets/(.*?)/.* 

.*是gready,但使用?它停在第一个/

+0

最后一部分仍然需要修正一下:''/ assets /(.*?)/.*''。但是你可以把它扔掉,只需使用'/ assets /(.*?)/''。 – 2011-04-29 11:21:22

+0

嗨,谢谢你的帮助。不幸的是,这也返回文件名(即560PEgnR/kVvNKfOX7w9tf5.JPG)。我只需要560PEgnR – Thomas 2011-04-29 11:21:32

+0

'@Boaz Yaniv' - 谢谢 '@ Thomas' - 尝试编辑答案 – hsz 2011-04-29 11:23:08

2

有几种选择。你的错误是你的。*部分也包含了'/',所以要么不要贪婪(如上面提出的hsz),要么从匹配组中排除'/',如/assets/([^/]*).*

4

备选...

/assets/([^/])+/ 
2

甲非正则表达式的方法

>>> string=""" 
... <assets> 
... <media width="100%" height="100%" img="/assets/560PEgnR/kVvNKfOX7w9tf7.JPG" valign="top"/> 
... <media width="100%" height="100%" img="/assets/560PEgnR/kVvNKfOX7w9tf5.JPG" valign="top"/> 
... <media width="100%" height="100%" img="/assets/560PEgnR/kVvNKfOX7w9tf4.JPG" valign="top"/> 
... </assets>                     
... """   

>>> for line in string.split("\n"): 
...  if "/assets/" in line: 
...   print line.split("/assets/")[-1].split("/")[0] 
... 
560PEgnR 
560PEgnR 
560PEgnR 
1

正确解析XML和避免正则表达式的多余使用:

from lxml import etree 

xml = """ 
<assets> 
<media width="100%" height="100%" img="/assets/560PEgnR/kVvNKfOX7w9tf7.JPG" valign="top"/> 
<media width="100%" height="100%" img="/assets/560PEgnR/kVvNKfOX7w9tf5.JPG" valign="top"/> 
<media width="100%" height="100%" img="/assets/560PEgnR/kVvNKfOX7w9tf4.JPG" valign="top"/> 
</assets> 
""" 

xmltree = etree.fromstring(xml) 

for media in xmltree.iterfind(".//media"): 
    path = media.get('img') 
    print path.split('/')[-2] 

给出:

 
560PEgnR 
560PEgnR 
560PEgnR