分享

VBA案例:正则表达式的排除型匹配运用--提取一段文字中所有分句子

 Excel实用知识 2021-12-11
左边还是小编之前所用过的《游褒禅山记》中的一段文字。然而小编这次是将这一段文字分解为一个个分句。

每一个分句以标点符号、,。;?分隔开。在[]中,^符号可以用来排除条件。比如[^1-9]、[^a-c]、[^(abc)],其中第一个表示除了数字1至9之外的任意一个字符,而第二个第三个表示除了a至c之外的任意一个字符。

最终效果图如下:

图片

具体代码如下:

Private Sub CommandButton1_Click()Dim re As Object, item, i As Long, arr() '定义re为对象变量,动态数组arr()Set re = CreateObject('vbscript.regexp') '利用后期绑定的方式创建对正则表达式的引用,赋值给变量re With re '利用with-end with语句设置正则表达式的三个属性 .Pattern = '[^(、,。;?)].+?[、,。;?]' '设置pattern属性,确定搜索条件是以除了、,。;?这几个标点符号外的任意一个或多个字符开始,以、,。;?这几个标点符号中的任意一个结尾的字符串。 .ignorecase = True '设置ignorerance属性,值为true表示忽略大小写进行搜索,这里也可以不要这句 .Global = True '设置global属性,值为true表示对目标文本进行全局匹配,这段文字中所有符合搜索条件的都被考虑到 End With If re.test(Range('a1').Text) Then 'test方法检验正则表达式有没有在A1单元格的文本中匹配到pattern中的字符 For Each item In re.Execute(Range('a1').Text) i = i + 1 ReDim Preserve arr(1 To i) '根据集合的元素个数确定i,根据i的变化重新声明动态数组的上界,用以保存正则表达式所提取出来的所有符合条件的字符串 arr(i) = item Next End IfRange('o1').Resize(i, 1) = WorksheetFunction.Transpose(arr) '将数组arr中的数据列排到o列End Sub

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多