提到用正则表达式匹配汉字,很容易搜到这个[\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