gpt4 book ai didi

python - lxml - 在 findall() 中使用正则表达式按属性值查找标签

转载 作者:搜寻专家 更新时间:2023-10-31 19:26:55 27 4
gpt4 key购买 nike

我正在尝试使用 lxml 来获取一组格式为

的评论
<div id="comment-1">
TEXT
</div>

<div id="comment-2">
TEXT
</div>

<div id="comment-3">
TEXT
</div>
...

我试过用

html.findall(".//div[@id='comment-*']")

但这会搜索字面星号。

我想做的事情的正确语法是什么?

编辑:我终于让它工作了

doc = lxml.html.parse(url).getroot()
comment_array = doc.xpath('.//div[starts-with(@id, "comment-")]')

最佳答案

您可以使用 regular XPath functions按照您的建议查找评论:

comments = doc.xpath('.//div[starts-with(@id, "comment-")]')

但是,对于更复杂的匹配,您可以使用正则表达式:对于 lxml,XPath 支持 EXSLT 命名空间中的正则表达式。看官方文档Regular expressions in XPath .

这是一个演示:

from lxml import etree

content = """\
<body>
<div id="comment-1">
TEXT
</div>

<div id="comment-2">
TEXT
</div>

<div id="comment-3">
TEXT
</div>

<div id="note-4">
not matched
</div>
</body>
"""

doc = etree.XML(content)

# You must give the namespace to use EXSLT RegEx
REGEX_NS = "http://exslt.org/regular-expressions"

comments = doc.xpath(r'.//div[re:test(@id, "^comment-\d+$")]',
namespaces={'re': REGEX_NS})

要查看结果,您可以“转储”匹配的节点:

for comment in comments:
print("---")
etree.dump(comment)

你得到:

---
<div id="comment-1">
TEXT
</div>


---
<div id="comment-2">
TEXT
</div>


---
<div id="comment-3">
TEXT
</div>

关于python - lxml - 在 findall() 中使用正则表达式按属性值查找标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10864426/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com