繁体   English   中英

Python:替换后仍保留多个空格?

[英]Python: Multiple white spaces remain after replacement?

从各种网站上抓取文本后,我想对这段文本进行规范化以进行分析。 我想做的一个步骤是用一个空格替换多个空格。

我知道这个话题在 Stack Overflow 上经常被提及。 但是,使用常见的方式,例如:

string = ' '.join(string.split())

要么

string = re.sub(' +', ' ', string)

似乎不会为每个网页产生预期的结果。 请在下面找到我使用的代码的摘录和 SEC 备案的示例,我无法做到没有多个空格。

import re
from selenium import webdriver

link = r"https://www.sec.gov/Archives/edgar/data/1800/000104746919001316/a2237648zdef14a.htm"
driver = webdriver.Chrome('./chromedriver')
driver.get(link)
x = driver.page_source

#Function to clean
def cleanhtml(raw_html):
    cleanr = re.compile('<.*?>')
    cleantext = re.sub(cleanr, '', raw_html)
    return cleantext

#Cleaning
x = str(x).replace('<', ' <')
x = cleanhtml(x)
x = x.replace('<br>', ' ').replace('&nbsp;', ' ').replace('&amp;', '&').replace('/\s\s+/g',' ').replace('•', ' ').replace("&lt", " ").replace("_", " ").replace("●", " ")
x = ' '.join(x.split())

#Results with persist to have multiple white spaces :-(
print(x)

注意:我刚刚编辑了我的问题,因为我之前的例子不合适! 感谢您到目前为止的回答!

由于更改的问题描述而更新:您应该使用 html 解析器来处理标签和 html 实体。 检索文本后,删除不需要的字符,例如 ndash、项目符号、多个空白字符:

import re
import bs4
from selenium import webdriver

link = r"https://www.sec.gov/Archives/edgar/data/1800/000104746919001316/a2237648zdef14a.htm"
driver = webdriver.Chrome('./chromedriver')
driver.get(link)
x = driver.page_source

soup = bs4.BeautifulSoup(x, 'html.parser')
text = soup.text

# you might also filter non-printable characters as explained here:
# https://stackoverflow.com/questions/92438/stripping-non-printable-characters-from-a-string-in-python
text = re.sub(r'[•●_—\u200B]+', ' ', text)

text = re.sub(r'\s+', ' ', text)
print(text)

我会尝试做这样的事情:

clean = ' '.join([word.strip() for word in not_clean.strip().split()])

这样,您不仅可以在空格处拆分,还可以清理每个拆分的单词和整个输入。

编辑:由于 OP 编辑​​了他们的问题,此答案不再解决问题。

import re

sample = '''<font color="#952369" size="1"><b>


<!-- COMMAND= GRID_ADD,"background-color:#952369;" -->


 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX&nbsp;&nbsp;</b></font>'''

def replace(match):
    return ''
    
sample = re.sub('\s+', replace, sample)

print(sample)
# Output:
# <fontcolor="#952369"size="1"><b><!--COMMAND=GRID_ADD,"background-color:#952369;"-->XXXXXXXXXXXXXXXXXXXXXXXXXXXXX&nbsp;&nbsp;</b></font>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM