正则表达式提取部分文件名

时间:2011-04-29 11:15:54

标签: python regex

我想提取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/(.*)/*"

但它没有做我想要的事情

任何帮助表示赞赏

由于

5 个答案:

答案 0 :(得分:4)

...替代地

/assets/([^/])+/

答案 1 :(得分:3)

你应该尝试:

/assets/(.*?)/.*

.*已经过了,但是使用?它会在第一个/停止。

答案 2 :(得分:2)

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

答案 3 :(得分: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

答案 4 :(得分: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