我是靠谱客的博主 欢呼楼房,最近开发中收集的这篇文章主要介绍正则表达式匹配中文时发现的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

大家使用正则表达式匹配中文时,常用 [u4e00-u9fa5] ,但有时使用 [u4e00-u9fa5] 匹配汉字时,发现有的汉字匹配不到,如:

㸌如
㔩叶

使用Python3测试:

r = '[^u4e00-u9fa5]'
#非汉字
for i in words:
word = re.sub(r, '', i)
#替换掉非汉字
if len(word) == 1:
print('"{0}"变成了"{1}"'.format(i, word))

结果为:

"㸌如"变成了"如"
"㔩叶"变成了"叶"

这是为什么呢?下面是几个主要的非英文语系字符范围:

2E80~33FFh:中日韩符号区。收容康熙字典部首、中日韩辅助部首、注音符号、日本假名、韩文音符,中日韩的符号、标点、带圈或带括符文数字、月份,以及日本的假名组合、单位、年号、月份、日期、时间等。
3400~4DFFh:中日韩认同表意文字扩充A区,总计收容6,582个中日韩汉字。
4E00~9FFFh:中日韩认同表意文字区,总计收容20,902个中日韩汉字。
A000~A4FFh:彝族文字区,收容中国南方彝族文字和字根。
AC00~D7FFh:韩文拼音组合字区,收容以韩文音符拼成的文字。
F900~FAFFh:中日韩兼容表意文字区,总计收容302个中日韩汉字。
FB00~FFFDh:文字表现形式区,收容组合拉丁文字、希伯来文、阿拉伯文、中日韩直式标点、小符号、半角符号、全角符号等。

如果将字符范围扩大为 u4e00-u9fff 会如何呢?

r = '[^u4e00-u9fff]'
for i in words:
word = re.sub(r, '', i)
if len(word) == 1:
print('"{0}"变成了"{1}"'.format(i, word))

结果还是:

"㸌如"变成了"如"
"㔩叶"变成了"叶"

继续扩大字符范围为 u3400-u9fa5:

r = '[^u3400-u9fa5]'
for i in words:
word = re.sub(r, '', i)
if len(word) == 1:
print('"{0}"变成了"{1}"'.format(i, word))

这次终于匹配到了,结果为:

"㸌如"变成了"㸌如"
"㔩叶"变成了"㔩叶"

这说明 “㸌” 和 “㔩” 两个字不在 4E00~9FFFh 范围内,而在 3400~4DFFh 范围中,所以,在使用 [u4e00-u9fa5] 匹配中文结果不正确时,可以扩大匹配范围尝试。

最后

以上就是欢呼楼房为你收集整理的正则表达式匹配中文时发现的问题的全部内容,希望文章能够帮你解决正则表达式匹配中文时发现的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(304)

评论列表共有 0 条评论

立即
投稿
返回
顶部