问问题
72 次
2 回答
4
您的误解在于您用于匹配和替换的模式。r'\<.+\>'
是贪婪的,这意味着它会尽可能多地匹配。在您提供的这个示例中,您的模式正在获取它找到.+
的第一个和最后一个之间的所有内容 ( ) 。您可以在Regex101等工具中可视化该行为,使其更易于理解。<
>
?
相反,通过将限定符添加到您的模式来使您的模式“懒惰” .+
:
import re
s = '彼女は<font color="#ff0000"><font color="#ff0000">看護婦</font></font>です。'
x = re.sub(r'\<.+?\>','',s)
print(x) # 彼女は看護婦です。
但是,您确实应该为此类活动使用适当的 HTML 解析器。正则表达式通常被认为不是处理 HTML 内容的好工具。有关如何完成此任务的示例,请参阅Juan C 对此问题的回答。
于 2020-08-06T18:16:26.457 回答
3
如果您不介意使用另一个库,您可以轻松地将 html 代码解析为字符串BeautifulSoup
:
from bs4 import BeautifulSoup
s = '彼女は<font color="#ff0000"><font color="#ff0000">看護婦</font></font>です。'
soup = BeautifulSoup(s, 'lxml')
print(soup.text)
输出:
Out[29]: '彼女は看護婦です。'
于 2020-08-06T18:12:57.340 回答