You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python新手求教:如何去除Unicode字符串中的多余空白?

嘿,我来帮你搞定这个网页抓取后的字符串清理问题~

首先说下你遇到的temp.remove(u'')没用的原因:list.remove()只会删除列表里第一个匹配的元素,你的结果列表里有好几个空字符串,所以执行一次只能删掉第一个,剩下的空元素还留在列表里,自然达不到想要的效果。

不过其实你根本不用这么麻烦,有更简单的方法来去除字符串前后的多余空白,同时把中间的多个空格合并成一个:

最推荐的简便方法(不需要正则)

直接用字符串的split()join()组合:

raw_str = u' Kathy and Othon Prounis '
cleaned_str = ' '.join(raw_str.split())
print(cleaned_str)  # 输出: u'Kathy and Othon Prounis'

为什么这个好用?因为raw_str.split()不带任何参数时,会自动把所有连续的空白字符(包括多个空格、制表符、换行符等)当作分隔符,而且会忽略字符串开头和结尾的空白,所以分割后的列表里根本不会有空字符串,直接用' '.join()就能得到格式整齐的结果。

如果一定要用正则的话

如果你坚持想用正则处理,也有两种思路:

  1. 分割后过滤空元素:
import re
raw_str = u' Kathy and Othon Prounis '
parts = re.split(r'\s+', raw_str)  # 按任意数量的空白分割
cleaned_parts = [part for part in parts if part]  # 过滤掉空字符串
cleaned_str = ' '.join(cleaned_parts)
  1. 直接替换多余空白:
import re
raw_str = u' Kathy and Othon Prounis '
# 先把所有连续空白换成单个空格,再去掉前后的空白
cleaned_str = re.sub(r'\s+', ' ', raw_str).strip()

关于你原来的remove方法

如果非要用你一开始的思路,想把列表里的空字符串都删掉,可以用循环删除:

temp = re.split(' ', u' Kathy and Othon Prounis ')
while u'' in temp:
    temp.remove(u'')
cleaned_str = ' '.join(temp)

不过这种方法效率不高,不如前面的方法简洁,所以还是更推荐第一种无正则的方案哦~

内容的提问来源于stack exchange,提问作者Moving Box

火山引擎 最新活动