python2 re.compile匹配中文数字字母:
# -*- coding: utf-8 -*-
import re
def chineseToUnic(ch):
# 中文字符串转unicode编码
return ch.decode('utf-8').encode('unicode_escape')
if __name__ == "__main__":
USERS_USERNAME = u"^[_a-zA-Z0-9\\u4e00-\\u9fa5]+$"
pattern = re.compile(USERS_USERNAME)
name = "对方"
name = chineseToUnic(name)
match = pattern.search(name)
print("name = {} | match = {}".format(name, match))
name = "user"
name = chineseToUnic(name)
match = pattern.search(name)
print("name = {} | match = {}".format(name, match))
name = "我user"
name = chineseToUnic(name)
match = pattern.search(name)
print("name = {} | match = {}".format(name, match))
name = "user我"
name = chineseToUnic(name)
match = pattern.search(name)
print("name = {} | match = {}".format(name, match))
name = "user我,,,,,###"
name = chineseToUnic(name)
match = pattern.search(name)
print("name = {} | match = {}".format(name, match))
输出如下:
name = \u5bf9\u65b9 | match = <_sre.SRE_Match object at 0x7fe734879988>
name = user | match = <_sre.SRE_Match object at 0x7fe7348799f0>
name = \u6211user | match = <_sre.SRE_Match object at 0x7fe734879988>
name = user\u6211 | match = <_sre.SRE_Match object at 0x7fe7348799f0>
name = user\u6211\uff0c\uff0c\uff0c\uff0c\uff0c### | match = None
Process finished with exit code 0
问题追溯:
写了一个正则表达式要匹配字符串中的两个中文,代码如下:
# coding=utf8
import re
s = '张三一'
r = re.search('[\u4e00-\u9fa5]{2}', s)
print r
结果发现不管怎么测试,r都是None。
后来发现是编码问题。
此处需要将字符串s和正则表达式都变成unicode编码方式才行,如下:
# coding=utf8
import re
s = u'张三一'
r = re.search(u'[\u4e00-\u9fa5]{2}', s)
print r
此时结果正常。估计在python3里边不用这么转换。
正则表达式:英文、中文、数字、下划线
^[\w\u4E00-\u9FA5\uF900-\uFA2D]*$
1、一个正则表达式,只含有汉字、数字、字母、下划线不能以下划线开头和结尾:
^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$ 其中:
^ 与字符串开始的地方匹配
(?!_) 不能以_开头
(?!.*?_$) 不能以_结尾
[a-zA-Z0-9_\u4e00-\u9fa5]+ 至少一个汉字、数字、字母、下划线
$ 与字符串结束的地方匹配
放在程序里前面加@,否则需要\\进行转义 @"^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$"
(或者:@"^(?!_)\w*(?<!_)$" 或者 @" ^[\u4E00-\u9FA50-9a-zA-Z_]+$ " )
2、只含有汉字、数字、字母、下划线,下划线位置不限:
^[a-zA-Z0-9_\u4e00-\u9fa5]+$
3、由数字、26个英文字母或者下划线组成的字符串
^\w+$
4、2~4个汉字
@"^[\u4E00-\u9FA5]{2,4}$";
5、
^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
用:(Abc)+ 来分析: XYZAbcAbcAbcXYZAbcAb
XYZAbcAbcAbcXYZAbcAb
6、
[^\u4E00-\u9FA50-9a-zA-Z_]
34555#5' -->34555#5'
[\u4E00-\u9FA50-9a-zA-Z_] eiieng_89_ ---> eiieng_89_
_';'eiieng_88&*9_ --> _';'eiieng_88&*9_
_';'eiieng_88_&*9_ --> _';'eiieng_88_&*9_