我想提取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/(.*)/*"
但它没有做我想要的事情
任何帮助表示赞赏
由于
答案 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