我遇到了一个奇怪的问题。我从数据库加载所有用户名,然后我用任何东西替换在用户名中找到的任何空格,所以它被删除。但它不起作用,空间停留在那里!这是我的代码
users = User.query.all()
for u in users:
username = u.username
print (username)
new_username = username.replace(" ","")
print (new_username)
作为示例,第一个打印返回: " MavNandi 7" 而第二个返回相同 " MavNandi 7"
空间停留在那里。我很困惑。任何线索?
答案 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'