用正则表达式匹配汉字,完整总结

提到用正则表达式匹配汉字,很容易搜到这个[\u4e00-\u9fa5],但是它不算全面,不包含一些生僻汉字。

本文对此问题做一个梳理。

以下是比较全面的汉字Unicode分布,截止Unicode 8.0标准(2015年6月):

区块 范围 实际汉字个数 正则式
CJK统一汉字
4E00-62FF, 6300-77FF,

7800-8CFF, 8D00-9FFF.

20,950 [\u4E00-\u9FFF]
CJK统一汉字扩展A区 3400-4DBF. 6,582 [\u3400-\u4DBF]
CJK兼容汉字 F900–FAFF. 472 [\uF900-\uFAFF]
CJK统一汉字扩展B区
20000-215FF, 21600-230FF,

23100-245FF, 24600-260FF,

26100-275FF, 27600-290FF,

29100-2A6DF.

42,711 [\U00020000-\U0002A6D6]
CJK统一汉字扩展C区 2A700-2B73F. 4,149  [\U0002A700-\U0002B73F]
CJK统一汉字扩展D区 2B740–2B81F. 222 [\U0002B740-\U0002B81F]
CJK统一汉字扩展E区 2B820–2CEAF. 5,762 [\U0002B820-\U0002CEAF]

如果想表示最普遍的汉字,用:

[\u4E00-\u9FFF]

如果想表示BMP之内的汉字,也就是Unicode值<=0xFFFF,用:

[\u4E00-\u9FFF\u3400-\u4DBF\uF900-\uFAFF]

这个包含但不限于GBK定义的汉字

如果想表示尽可能所有的汉字,用:

[\u4E00-\u9FFF\u3400-\u4DBF\uF900-\uFAFF\U00020000-\U0002CEAF]

这个包含上表的8万多个汉字

说明:

1, 以上正则表达式不会匹配(英文、汉字的)标点符号

2, 包含了一些没有汉字的空位置,这个无所谓。

3, 在Python 3.5上测试通过。

时间: 2024-10-14 19:14:59

用正则表达式匹配汉字,完整总结的相关文章

Autoit3 正则表达式 匹配汉字

关于Autoit3正则匹配汉字,在网上搜来搜去都是雷同的内容,[\u4e00-\u9fa5] 然而,Invalid all the time 直到认真钻研Help File,最终又看到了这个 http://www.pcre.org/original/doc/html/pcrepattern.html 有心人自懂,瞬间解决,Oh yeah!

C# 正则表达式匹配汉字

int P_scalar = 0; Regex P_regex = new Regex("^[\u4E00-\u9FA5]{0,}$"); for(int i = 0;i < txt_str.Text.Length; i++) { P_scalar = P_regex.IsMatch(txt_str.Text[i].ToString()) ? ++P_scalar : P_scalar; } MessageBox.Show(P_scalar.ToString(), "t

正则表达式的汉字匹配

这里是几个主要非英文语系字符范围 2E80-33FFh:中日韩符号区.收容康熙字典部首.中日韩辅助部首.注音符号.日本假名.韩文音符,中日韩的符号.标点.带圈或带括符文数字.月份,以及日本的假名组合.单位.年号.月份.日期.时间等. 3400-4DFFh:中日韩认同表意文字扩充A区,总计收容6,582个中日韩汉字. 4E00-9FFFh:中日韩认同表意文字区,总计收容20,902个中日韩汉字. A000-A4FFh:彝族文字区,收容中国南方彝族文字和字根. AC00-D7FFh:韩文拼音组合字区

PHP 正则表达式匹配 preg_match 与 preg_match_all 函数

--http://www.5idev.com/p-php_preg_match.shtml 正则表达式在 PHP 中的应用 在 PHP 应用中,正则表达式主要用于: 正则匹配:根据正则表达式匹配相应的内容 正则替换:根据正则表达式匹配内容并替换 正则分割:根据正则表达式分割字符串 在 PHP 中有两类正则表达式函数,一类是 Perl 兼容正则表达式函数,一类是 POSIX 扩展正则表达式函数.二者差别不大,而且推荐使用Perl 兼容正则表达式函数,因此下文都是以 Perl 兼容正则表达式函数为例

正则匹配汉字

正则匹配汉字在不同的编码,不同的程序语言上都有些细微的出入,稍不注意就会得不到正确的结果,特此对比一下 javascript 和 php 的正则匹配汉字,而且 php 中的 gb2312 和 utf-8 两种编码匹配规则还不相同同. 在javascript中,要判断字符串是中文是很简单的: <script type="text/javascript"> var str = "我热爱编程"; if(/^[\u4e00-\u9fa5]+$/ . test(s

【LeetCode-面试算法经典-Java实现】【010-Regular Expresssion Matching(正则表达式匹配)】

[010-Regular Expresssion Matching(正则表达式匹配)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Implement regular expression matching with support for '.' and '*'. '.' Matches any single character. '*' Matches zero or more of the preceding element.The matching sho

使用正则表达式匹配任意字符包括空格和换行符

注:元字符包括\ | ( ) [ ] { } ^ $ * + ? . ) 匹配中文字符的正则表达式: [\u4e00-\u9fa5]评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^\x00-\xff]评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 匹配空白行的正则表达式:\n\s*\r评注:可以用来删除空白行 匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</>|<.*? />

C#正则表达式匹配任意字符

原文:C#正则表达式匹配任意字符 不得不说正则很强大,尤其在字符串搜索上 匹配任意字符,包括汉字,换行符: [\s\S]*. 版权声明:本文为博主原创文章,未经博主允许不得转载.

正则表达式匹配身份证 电话号码 邮箱 住宅电话 邮编等

身份证号码的匹配 大陆的居民身份证号码有两种:18位和15位,15位的身份证号码是老一代身份证号码. 18位和15位的区别在于两个部分:第一,18位号码的年份以4位计而15位号码的年份为2位,如1987年在18位号码中为'1987'而在15位号码中为'87',这里1987只是作为一个例子可能1987年及以后根本不存在15位号码:第二处不同在于18位号码的最后一位为数字校验码,15位号码没有数字校验位. 好吧,可能你还不知道身份证号码各个部分代表着什么,那么让我简略地介绍一下. 身份证号码总共有4