正则表达式——Unicode 匹配规则

一般来说,数字字符解释[0-9],单词字符就是[0-9a-zA-Z_],空白字符则包括空格、回车等字符,但这是 ASCII 编码中的情况,在 Unicode 编码中并非如此。

因为包括了多种语言和字符,所以在 Unicode 编码中,全角数字0、1、2之类也算作“数字字符”,可以由\d匹配;中文字符,也可以算作“单词字符”,由\w匹配;同样的道理,中文的全角空格(码值为30 ff),也可以算作“空白字符”,由\s匹配。所以,如果在 Python 2 中指定了正则表达式使用 Unicode 模式(最简单的方式解释在正则表达式的开头指定模式修饰符(?u)),\d,\w,\s就能匹配全角数字、中文字符、全角空格。对于这种情况,本书中称为 Unicode 匹配规则;相应地,之前 ASCII 编码中的匹配,称为 ASCII 匹配规则。

Unicode 模式下\d、\w、\s的匹配
简记法 ASCII 匹配规则 Unicode 匹配规则
\w [0-9a-zA-Z_] [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Lm}\p{Nd}\p{Pc}]
\d [0-9] [\p{Nd}]
\s \t,\n,\v,\f,\r,\x20 [\f\n\r\t\v\x85\p{Z}]
  注:\p{L}表示任意语言中的字母字符(包括英文字母和汉字);

\p{M}表示用来与其他字符结合的字符(声调、元音变化符等);

\p{Nd}表示任何书写系统中的 0~9 字符,汉字全角字符1、2等也算;

\p{N1}表示形如字符的数字,比如罗马数字;

\p{Pc}表示类似下划线之类的字符;

\p{InEnclosedAlphanumerics}表示被包围的数字或字符,比如①;

\p{L}表示任意语言中的字母字符(包括英文字母和汉字);

有时候,这样的规定确实让人抓狂:假设你希望用正则表达式\d{6,12}来验证一个长度在 6 到 12 之间的数字字符串,却没有留意\d能匹配全角数字,验证就可能出错;所以,一定要注意此类问题。

你可能感兴趣的:(正则与jpython,正则表达式)