【发布时间】:2017-07-01 12:59:41
【问题描述】:
我在 Python 3.6 中的 lxml etree.XPath 表达式中使用正则表达式时遇到问题
在此示例中,我在 stackoverflow 主页上搜索被空格包围的 4 位数字。并返回该元素的xpath。
我得到的匹配只是空白。我似乎无法过滤掉它们。我的感觉是,这可能是一些编码问题,但不能指望它......
下图来自https://regex101.com/。正确地给了我 1 场比赛。
这里是主页 html 的链接: https://drive.google.com/open?id=0B3HIB_5rVAxmZU9ialZHdzhscE0
这是我的代码
from lxml import html
from lxml import etree
with open('stackoverflow.html', 'r', encoding='utf8') as f:
page_html = f.read()
html_tree = html.fromstring(page_html)
regexpNS = "http://exslt.org/regular-expressions"
find = etree.XPath("//*[re:test(., '(\s\d{4}\s)', 'i')]",
namespaces={'re':regexpNS})
tree = etree.fromstring(page_html)
tree = etree.ElementTree(tree)
for element in find(tree):
text = str(element.text)
str(text).strip()
if text != '':
print(text)
print(len(text))
print(tree.getpath(element))
print('##############################################################')
输出
None
4
/ *
##############################################################
13
/ * / *[2]
##############################################################
13
/ * / *[2] / * [8]
##############################################################
17
/ * / *[2] / * [8] / *
##############################################################
21
/ * / *[2] / * [8] / * / *
##############################################################
25
/ * / *[2] / * [8] / * / * / * [18]
##############################################################
29
/ * / *[2] / * [8] / * / * / * [18] / *
##############################################################
33
/ * / *[2] / * [8] / * / * / * [18] / * / * [2]
##############################################################
site
design / logo © 2017
Stack
Exchange
Inc;
user
contributions
licensed
under
117
/ * / *[2] / * [8] / * / * / * [18] / * / * [2] / *
##############################################################
应该去掉len > 0 的空白文本行怎么回事???
谢谢!
【问题讨论】:
-
嗯...没有人解释为什么我得到 xpath 正则表达式的多个结果...解决方法就足够了。根本问题与其重复的原因不同。反正我觉得没关系。
标签: python html regex xpath lxml