【问题标题】:Python - search and replace broken up text in HTMLPython - 在 HTML 中搜索和替换分解的文本
【发布时间】:2018-12-27 01:23:13
【问题描述】:

我一直在使用一种工具将 pdf 文档转换为 HTML,以便可以更轻松地编辑它们,同时保留尽可能多的格式。我需要做的是用文本“[REDACTED]”替换某些短语,问题是这个文本被随机标签(主要是跨标签)不可预测地分解,所以我不能轻易地使用查找和替换。

作为示例,我需要从此 html sn-p 中替换文本“要删除的敏感信息”:

<span class="fs4 fc2">Sensitive<span class="_ _b"> </span>Information to Re<span class="_ _c"></span>move</span>

有了这个:

<span class="fs4 fc2">[REDACTED]</span>

有没有办法使用 Beautiful Soup 之类的库或某种复杂的正则表达式字符串来完成此操作?

【问题讨论】:

  • bs4 比 regex 更有可能工作,但到目前为止你尝试过什么?
  • 所以我首先发现这段代码不起作用:target = html_soup.find_all(text=sensitive_info) ` for v in target:` ` v.replace_with(v.replace(sensitive_info, "[REDACTED]"))` 和我试图看看是否有某种模式与文本是如何分解的,并且在这方面没有运气。如果有人遇到过类似的问题并且也没有找到任何东西,请搜索 Stack Overflow,所以我很困惑......
  • 您使用的是什么工具?我想知道为什么有些工具会在转换过程中插入随机垃圾。
  • 它被称为 pdf2htmlex:github.com/coolwanglu/pdf2htmlEX 我的意思是如果你知道另一种支持 python 的方式来查找和替换 pdf 中的文本同时保留它的格式,那也可以解决我的问题 :)
  • 我认为遍历所有跨度然后获取其中的文本至少是部分解决方案:for span in soup.find_all('span'): 然后text = span.get_text() 然后if text == "Sensitive Information to Remove": 因为 get_text 删除了一个元素。

标签: python html regex beautifulsoup


【解决方案1】:

要替换 HTML 文档中的文本,您可以使用 BeautifulSoup 提供的 clear()append() 方法 (manual pages):

data = """<span class="fs4 fc2">Sensitive<span class="_ _b"> </span>Information to Re<span class="_ _c"></span>move</span>"""

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'lxml')

secret_string = "Sensitive Information to Remove"
redacted_string = "[REDACTED]"

while True:
    s = soup.body.find(lambda t: t.text==secret_string)
    if not s:
        break

    s.clear()
    s.append(redacted_string)

print(soup)

这将打印:

<html><body><span class="fs4 fc2">[REDACTED]</span></body></html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 2023-01-25
    相关资源
    最近更新 更多