0

我希望 BeautifulSoup 将这样的字符串添加到我的 HTML 页面中:

{{< Transfer/component_short_name  >}} 

(如果你对为什么感兴趣,这是一个 Hugo 短代码,一种降价变量)

当我在 python 中以编程方式构建它并使用添加它tag.insert_after()时,文档中的最终结果如下所示:

{{&lt; Transfer/component\_short\_name  &gt;}}

这当然不一样。

我使用字符串替换为 V 形 > < 管理了一个解决方法,但下划线“_”需要进入正则表达式,为简单的操作留下复杂的代码,所以我想知道 BeautifulSoup 中是否有选项。

我尝试了各种方法,例如var_name = var_name.replace("\\_", "_"),但这不起作用。

4

1 回答 1

0

我看不到使用 BeautifulSoup 避免&lt;&gt;转换的方法,但正如您所说,它们可以在之后进行转换。在以下示例中,没有下划线转义:

from bs4 import BeautifulSoup
import re

shortcode = "{{< Transfer/component_short_name  >}}"
html = "<html><body><h1>hello world</h1></body>"
soup = BeautifulSoup(html, "html.parser")
soup.h1.insert_after(shortcode)
fixed = re.sub('\{\{&lt;|&gt;\}\}|\\\_', lambda x: {'{{&lt;' : '{{<', '&gt;}}' : '>}}', '\\_' : '_'}[x.group(0)], str(soup))

print(fixed)

将 HTML 指定为:

<html><body><h1>hello world</h1>{{< Transfer/component_short_name  >}}</body></html>

在这里,\_似乎不需要更换,但为了完整起见,我已将其包括在内。

于 2021-11-22T12:37:43.070 回答