我遇到了一个奇怪的问题.我从数据库加载所有用户名,然后我用任何东西替换在用户名中找到的任何空格,所以它被删除.但它不起作用,空间停留在那里!这是我的代码
users = User.query.all()
for u in users:
username = u.username
print (username)
new_username = username.replace(" ","")
print (new_username)
Run Code Online (Sandbox Code Playgroud)
作为例子,第一个打印返回:"MavNandi 7",第二个返回相同的"MavNandi 7"
空间停留在那里.我很困惑.任何线索?
你几乎肯定有一个带有空格变量的字符串,而不是沼泽标准的U + 0020 SPACE,但更有可能是U + 00A0 NO-BREAK SPACE.打印时,这两个字符看起来完全相同:
>>> 'MavNandi\xa07'
'MavNandi\xa07'
>>> print('MavNandi\xa07')
MavNandi 7
Run Code Online (Sandbox Code Playgroud)
可能还有其他人; 例如,Unicode标准定义了17个空格分隔符,其中许多看起来像一个常规空间(具有不同的宽度).
正如您可以看到解释器一样,当回显该值时,使用\xa0转义序列来区分这两者.您可以在打印时使用该repr()功能生成相同的输出:
>>> print(repr('MavNandi\xa07'))
'MavNandi\xa07'
Run Code Online (Sandbox Code Playgroud)
还有一个ascii()函数,它就像repr()使用转义序列替换ASCII范围之外的任何字符一样,使得组合字符和区分可能看起来相似的Unicode字形可能更容易.
您可以使用正则表达式替换所有空格字符,包括不间断空格,制表符,换行符以及Unicode标准指定为空格的任何其他内容:
import re
username = re.sub('\s+', '', username)
Run Code Online (Sandbox Code Playgroud)
的\s字符类匹配任何这样的空白字符,则+比赛1或更换时更这样的字符; 第二个参数用空字符串替换所有这些匹配.
演示:
>>> import re
>>> re.sub('\s+', '', 'MavNandi\xa07')
'MavNandi7'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
907 次 |
| 最近记录: |