不间断空格被打印为空白,但在内部处理为
\xa0
。如何一次删除所有这些字符?
目前我已经直接替换了:
text = text.replace('\u202f','')
text = text.replace('\u200d','')
text = text.replace('\xa0','')
但是每次我从外部来源抓取文本句子时,这些字符都是不同的。如何一次性全部删除?
您可以使用正则表达式替换。
如果你想替换所有空格,你可以使用:
import re
text = re.sub(r'\s', '', text)
这包括所有 unicode 空白,如此问题的答案中所述。
从这个答案中,您可以看到(在撰写本文时),Python 正则表达式中被识别为空格(例如
\s
)的 unicode 常量是:
0x0009
0x000A
0x000B
0x000C
0x000D
0x001C
0x001D
0x001E
0x001F
0x0020
0x0085
0x00A0
0x1680
0x2000
0x2001
0x2002
0x2003
0x2004
0x2005
0x2006
0x2007
0x2008
0x2009
0x200A
0x2028
0x2029
0x202F
0x205F
0x3000
这看起来好像能满足您的需求。
您可以使用
\h
(水平空白)来匹配不间断空格(\s 也将匹配垂直空白、换行符等)
\h
相当于 [\t\x{00A0}\x{1680}\x{180E}\x{2000}\x{2001}\x{2002}\x{2003}\x{2004}\x{2005}\x{2006}\x{2007}\x{2008}\x{2009}\x{200A}\x{202F}\x{205F}\x{3000}]
https://regex101.com/ 是一个很棒的正则表达式资源。您可以在快速参考(右下角)中搜索“whitespace”,以查看可能对您有帮助的其他相关选项。 (记得检查完整的搜索结果)