Python 3 - 无法使用replace删除字符串中的空格

时间:2015-07-03 16:24:13

标签: python python-3.x

我遇到了一个奇怪的问题。我从数据库加载所有用户名,然后我用任何东西替换在用户名中找到的任何空格,所以它被删除。但它不起作用,空间停留在那里!这是我的代码

users = User.query.all()
for u in users:
  username = u.username
  print (username)
  new_username = username.replace(" ","")
  print (new_username)

作为示例,第一个打印返回: " MavNandi 7" 而第二个返回相同 " MavNandi 7"

空间停留在那里。我很困惑。任何线索?

1 个答案:

答案 0 :(得分:5)

你几乎肯定有一个包含空格变量的字符串,而不是沼泽标准U+0020 SPACE,但更可能是U+00A0 NO-BREAK SPACE。打印时两个字符看起来完全相同:

>>> 'MavNandi\xa07'
'MavNandi\xa07'
>>> print('MavNandi\xa07')
MavNandi 7

可能还有其他人;例如,Unicode标准定义17 space separators,其中许多看起来像一个常规空间(宽度不同)。

正如您可以看到解释器一样,当回显该值时,使用\xa0转义序列来区分这两者。打印时使用repr() function可以生成相同的输出:

>>> print(repr('MavNandi\xa07'))
'MavNandi\xa07'

还有一个ascii() function,它就像repr()一样,但是用转义序列替换ASCII范围之外的任何字符,这样可以更容易地看到组合字符并区分Unicode字形否则看起来很像。

您可以使用正则表达式替换所有空格字符,包括不间断空格,制表符,换行符以及Unicode标准指定为空格的任何其他内容:

import re

username = re.sub('\s+', '', username)

\s字符类匹配任何此类空白字符,+在替换时匹配1个或多个此类字符;第二个参数用空字符串替换所有这些匹配。

演示:

>>> import re
>>> re.sub('\s+', '', 'MavNandi\xa07')
'MavNandi7'