繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM