【www.bbyears.com--python】
正在编写的一个小程序MiniBlogs Updater中,需要计算用户所输入的文字字数。因为中英文字符编码长度不一,如果直接使用python中的len()函数,它计算的是该字串的实际长度,一个中文字并非等同于一个英文字母的。因此,需要把中文字当成英文字母来处理。
我写了这样一条语句来处理:
代码如下length=len(re.sub("[x80-xff]{3}","a",msg))
它的意思是,把所有的中文都替换成英文字母a,然后再统计字数。(只是统计而已,不修改源字串。)这条语句在windows下utf8文件中能够正常工作。
常见中文正则表达式匹配结果比较
模式[u4e00-u9fff]匹配结果为:2 mi ^ ^
模式[^u4e00-u9fff]匹配结果为:我亲爱的 只Mao ,你知道吗?我在想你们 -
模式[u4e00-u9fa5]匹配结果为:2 mi ^ ^
模式[^u4e00-u9fa5]匹配结果为:我亲爱的 只Mao ,你知道吗?我在想你们 –
模式[u4e00-u9fa5uf900-ufa2d]匹配结果为:2 mi ^ ^
模式[^u4e00-u9fa5uf900-ufa2d]匹配结果为:我亲爱的 只Mao ,你知道吗?我在想你们 -
模式[chr(0xa1)-chr(0xff)]匹配结果为:2 mi, ^-^
模式[^chr(0xa1)-chr(0xff)]匹配结果为:我亲爱的 只Mao 你知道吗?我在想你们
模式[x80-xff]匹配结果为:我亲爱的 只Mao 你知道吗?我在想你们
模式[^x80-xff]匹配结果为:2 mi, ^-^
模式[x00-xff]匹配结果为:我亲爱的2只Maomi,你知道吗?我在想你们^-^
模式[^x00-xff]匹配结果为:
模式[x80-xff][x80-xff]匹配结果为:我亲爱的 只Mao 你知道吗?我在想你们
模式[^x80-xff][^x80-xff]匹配结果为:mi, ^-^
网上关于GBK、GB2312和BIG5编码范围的资料比较多,但是日文的资料比较少,我总结了一下,希望能对大家在正则中判断
这些字符集尤其是日文字符集的各种字、标点以及特殊符号的时候有所帮助。
UTF8
[x01-x7f]|[xc0-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}
UTF16
[x00-xd7][xe0-xff]|[xd8-xdf][x00-xff]{2}
JIS
[x20-x7e]|[x21-x5f]|[x21-x7e]{2}
SJIS
[x20-x7e]|[xa1-xdf]|([x81-x9f]|[xe0-xef])([x40-x7e]|[x80-xfc])
EUC_JP
[x20-x7e]|x81[xa1-xdf]|[xa1-xfe][xa1-xfe]|x8f[xa1-xfe]{2}
EUC_JP标点符号及特殊字符
[xa1-xa2][xa0-xfe]
EUC_JP全角数字
xa3[xb0-xb9]
EUC_JP全角大写英文
xa3[xc1-xda]
EUC_JP全角小写英文
xa3[xe1-xfa]
EUC_JP全角平假名
xa4[xa1-xf3]
EUC_JP全角片假名
xa3[xb0-xb9]|xa3[xc1-xda]|xa5[xa1-xf6][xa3][xb0-xfa]|[xa1][xbc-xbe]|[xa1][xdd]
EUC_JP全角汉字
[xb0-xcf][xa0-xd3]|[xd0-xf4][xa0-xfe]|[xB0-xF3][xA1-xFE]|[xF4][xA1-xA6]|[xA4][xA1-xF3]|[xA5][xA1-xF6]|[xA1][xBC-xBE]
Big5
[x01-x7f]|[x81-xfe]([x40-x7e]|[xa1-xfe])
GBK
[x01-x7f]|[x81-xfe][x40-xfe]
GB2312汉字
[xb0-xf7][xa0-xfe]
GB2312半角标点符号及特殊符号
xa1[xa2-xfe]
GB2312罗马数组及项目序号
xa2([xa1-xaa]|[xb1-xbf]|[xc0-xdf]|[xe0-xe2]|[xe5-xee]|[xf1-xfc])
GB2312全角标点及全角字母
xa3[xa1-xfe]
GB2312日文平假名
xa4[xa1-xf3]
GB2312日文片假名
xa5[xa1-xf6]
?充:
GB18030
[x00-x7f]|[x81-xfe][x40-xfe]|[x81-xfe][x30-x39][x81-xfe][x30-x39]
日文半角空格
x20
SJIS全角空格
(?:x81x81)
SJIS全角数字
(?:x82[x4f-x58])
SJIS全角大写英文
(?:x82[x60-x79])
SJIS全角小写英文
(?:x82[x81-x9a])
SJIS全角平假名
(?:x82[x9f-xf1])
SJIS全角平假名扩展
(?:x82[x9f-xf1]|x81[x4ax4bx54x55])
SJIS全角片假名
(?:x83[x40-x96])
SJIS全角片假名扩展
(?:x83[x40-x96]|x81[x45x5bx52x53])
EUC_JP全角空格
(?:xa1xa1)
EUC半角片假名
(?:x8e[xa6-xdf])