python - 在大型 HTML 文件 python 中使用漂亮的汤正则表达式
问题描述
我在任何地方都找不到这个特定问题的答案,而且我自己也无法弄清楚。
我有一个大的 HTML 文件,它是电子邮件的模板。我已将其作为文本文件读入并将值保存在变量 html_string 中我有几行包含语句,例如
<span style="color: #ff0000;"> {column_1}</span>
<span style="color: #ff0000;">{column_2}</span>
其中 {column_*} 部分将替换为其他值,例如名称。另一个问题建议使用诸如
soup = BeautifulSoup(html_string, features="html5lib")
target = soup.find_all(text=re.compile('^{column_$'))
print("Target:")
print(target)
for v in target:
# do something (this never gets accessed due to empty list)
返回
>>Target:
>> []
而我希望它会返回 {column_*} 的位置列表或其他我可以用来插入我自己的字符串的东西。
我为 re.compile(x) 部分尝试了几种不同的结构,但没有任何效果。
任何帮助将不胜感激!
编辑----- 出于某种原因,即使我导入了 bs4,也只有 findAll 函数会执行我需要的功能 - 通常建议不要使用它,因为 bs4 中的 find_all 会“做同样的事情” ¬(.. )¬
soup = BeautifulSoup(html_string, features="html5lib")
target = soup.findAll(text=re.compile('{column_.}'))
for v in target:
v.replace_with(dictionary[str(v)])
body = str(soup)
解决方案
您可以使用正则表达式来查找模板并将文本替换为所需的值:
import re
vals = {'column_1':'Name', 'column_2':'Age'}
result = re.sub('\{.*?\}', lambda x:vals[x.group()[1:-1]], content)
print(result)
输出:
<span style="color: #ff0000;"> Name</span>
<span style="color: #ff0000;">Age</span>
推荐阅读
- validation - Parsley 验证:成功输入验证后,DOM 中保留一个空元素
- docker - 是否可以在 docker 容器启动时运行多个子目录的设置脚本
- javascript - FontAwesome 只显示正方形
- amazon-web-services - Jenkins 管道 - 检查 ECS 服务是否存在
- python - 即使我的代码看起来格式正确,选项卡错误
- google-cloud-platform - Google Cloud App 在测试模式下有超过 100 个用户 - 如何删除他们?
- linear-regression - stats::step 在函数中失败,因为在 lm 对象中找不到数据
- c# - 如何使用 .net 核心和 JsonSerializer 自定义序列化 json
- amazon-dynamodb - 通过 GSI 使用 AppSync SDK 和 Amplify CLI 查询 DynamoDB
- jsp - 如何将EL表达式嵌套到jsp Java的输入字段中