50字范文,内容丰富有趣,生活中的好帮手!
50字范文 > 正则表达式匹配中文时发现的问题

正则表达式匹配中文时发现的问题

时间:2019-12-01 06:43:21

相关推荐

正则表达式匹配中文时发现的问题

大家使用正则表达式匹配中文时,常用[\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] 匹配中文结果不正确时,可以扩大匹配范围尝试。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。