[英]regex to extract part of filename
我想提取包含在 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/(.*)/*"
但它没有做我想要的
任何帮助表示赞赏
谢谢
或者...
/assets/([^/])+/
你应该尝试:
/assets/(.*?)/.*
.*
很好,但使用?
它停在第一个/
。
有几种选择。 您的错误是您的。* 部分还包含“/”,因此要么减少贪婪(如上面建议的 hsz),要么像/assets/([^/]*).*
这样从匹配组中排除“/” /assets/([^/]*).*
.
非正则表达式方法
>>> 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
正确解析 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.