匹配中文的正则表达式
窝写了一小段代码(虽然写的不太好,但是基本可以表达意思)
import re
nickname = raw_input('Please input your nickname > ')
if not re.search(u'^[\u4e00-\u9fa5a-zA-Z0-9]+$', unicode(nickname,'utf8')):
print 'Your nickname format is error, please try again !'
else:
print 'Hello %s'% nickname
如你所见,上面第5行的代码,就是匹配中文和字母,数字的正则表达式了。里面的\u4e00-\u9fa5
就是中文汉字的unicode
编码所在位置。
Python字符串的编码问题
还是以上面那段代码来说。注意看第5行的代码
if not re.search(u'^[\u4e00-\u9fa5a-zA-Z0-9]+$', unicode(nickname,'utf8')):
其实这样的代码并不严谨。因为在Python 中默认是用unicode
编码来处理字符串的,因此做编码转换的时候,一般要以unicode
作为中间编码,也就是说:
其他编码格式的字符串--->解码(decode)--->unicode
--->编码(encode)--->所需要的编码格式。
因此,处理字符串编码的问题的时候,先要明白需要转换的字符串的编码格式是什么。
代码中字符串的默认编码格式与代码文件本身的编码格式是一样的
比如: s = '涛' 在utf8的文件中,那么s就是utf8编码的,但是如果文件是gb2312编码,那么s就是gb2312编码的。此时,如果想要处理s这个字符串就要先decode成unicode编码了。
不过如果是酱紫 s = u'涛',那么s就是unicode编码了,这个时候s的编码方式不会被文件的编码所影响。
如果一个字符串已经是unicode编码了,再解码就会出错
因此严谨的方式就是先对字符串进行编码格式的判别,最简单的办法就是使用Python 默认提供的isinstance()
方法.
代码可以这样写
isinstance(s, unicode)
如果不是unicode编码就会报错。
窝今天在处理用户昵称的地方,忘记字符串会直接使用文件的编码了,所以对它进行了重新编码orz果断就报错了。。。以后还是要好好注意细节的说。