Python 使用lxml在文本提取中添加单词边界空格

Python 使用lxml在文本提取中添加单词边界空格,python,html-parsing,lxml,Python,Html Parsing,Lxml,lxml.html文档中的示例: >>> from lxml import html >>> root = html.fragment_fromstring('<p>Hello<br>world!</p>') >>> html.tostring(root,method='text') 'Helloworld!' >>从lxml导入html >>>root=html.fragment\u fromstrin

lxml.html
文档中的示例:

>>> from lxml import html
>>> root = html.fragment_fromstring('<p>Hello<br>world!</p>')
>>> html.tostring(root,method='text')
'Helloworld!'
>>从lxml导入html
>>>root=html.fragment\u fromstring(“Hello
world!

”) >>>tostring(root,method='text') “地狱世界!”

我的问题是:有没有简单(或“正确”)的方法来制作
“Hello world!”字符串?

您可以尝试以下方法:

from lxml import html
doc = html.document_fromstring('<p>Hello<br>world!</p>')

for br in doc.xpath("*//br"):
    br.tail = " " + br.tail if br.tail else " "

doc.text_content()

在将解析后的HTML转换为字符串之前,我会尝试将

标记替换为
“”
。。。我不知道lxml,所以我不能说你如何实现它…我明白了。。。然而,我正在寻找一种通用的方法。比如,
标签中的文本如何;还有其他标签吗?我想最好的解决方案是告诉
tostring()
分隔符,就像在
join()
中那样,告诉它分隔符很小,你可以编写自己的函数,只需简单的替换或一些正则表达式就可以做到这一点。问题是如何决定用分隔符替换什么?由于a
与空格是完全不同的字符,因此应将a视为相同的字符。你可能会认为很明显要替换这个,但这只是你的情况。其他情况有其他要求,没有任何情况是“自然”的,足以实施这种行为。尽管如此,通过xpath、正则表达式和其他字符串操作,这些特定的情况很容易实现。在我的例子中,我只是将
*//br
替换为
//*
,然后将
\s+
替换为
re
的单个空格。谢谢
'Hello world!'