前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA:正则表达式(5) -提取中文内容

VBA:正则表达式(5) -提取中文内容

作者头像
Exploring
发布2023-09-25 14:37:02
9690
发布2023-09-25 14:37:02
举报
文章被收录于专栏:数据处理与编程实践

示例:数据保存在A列中,需要将其中的中文字符提取至B列。

1 中文字符集

CJK(CJK Unified Ideographs,中日韩统一表意文字)字符集中了从0x4E000x9FA5的连续区域,包含了 20902 个来自于中国、韩国、日本的汉字,涵盖了多数中文字符,可以说CJK是GB2312-80和BIG5等字符集的超集。

0x4E00和0x9FA5分别对应中文中的哪个字呢?在Word中使用【符号】对话框将可以进行查询,如下图所示。

(1)0x4E00

(2)0x9FA5

0x4E00对应汉字【一】,0x9FA5对应汉字【龥】,这个字属于古汉字,其读音为

在不同的字体(Font)中,0x9FA5不一定是CJK统一汉字的最后一个字。但是,一般情况下使用[一-龥]匹配汉字就足够了。由于输入龥字比较麻烦,直接使用16进制的字符编码[\u4e00-\u9fa5]来表示中文字符集更加方便。

2 代码实现

回到正文开头,采用的VBA代码如下:

代码语言:javascript
复制
Option Explicit

Sub RegExpChinese()
    
    '提取中文内容
    
    Dim objRegEx As Object
    
    Dim obj As Range, strTxt As String

    Set objRegEx = CreateObject("vbscript.regexp")
    
    'objRegEx.Pattern = "[^一-龥]"
    objRegEx.Pattern = "[^\u4e00-\u9fa5]"
    
    objRegEx.Global = True
    
    For Each obj In Range([A1], Cells(Rows.Count, 1).End(xlUp))
    
        strTxt = Trim(obj.Value2)
        
        obj.Offset(0, 1).Value2 = objRegEx.Replace(strTxt, "")
        
    Next
    
    Set objRegEx = Nothing
    
    MsgBox "Done!"
    
End Sub

(1)[^\u4e00-\u9fa5],用于匹配非中文字符,方括号中的^代表字符集的否定,即不包含指定的字符集。

延伸阅读:

(1)超集

如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S1就是S2的一个超集,反过来说,S2是S1的子集。

参考资料:

[1] VBA之正则表达式(5)-- 中文字符(https://blog.csdn.net/taller_2000/article/details/88374471

[2] 超集(https://baike.baidu.com/item/%E8%B6%85%E9%9B%86/1059571

[3] 正则表达式之匹配中文(https://www.w3cschool.cn/regexp/nck51pqj.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-25 08:00,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据处理与编程实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 中文字符集
  • 2 代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档