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()就能得到格式整齐的结果。
如果一定要用正则的话
如果你坚持想用正则处理,也有两种思路:
- 分割后过滤空元素:
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)
- 直接替换多余空白:
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




