分享

如何从混杂字符串中提取标题?

 excel05 2019-11-23

1、 题目

如下图所示如何从混杂字符串中提取标题,注意左侧序号格式非常不规范

如何从混杂字符串中提取标题?

2、 解题思路

首先仔细观察A列单元格的特点,以便我们设置Pattern属性:

1. 左侧为序号,但格式不规范,然而有一个相同点就是他们均以数字开头且位数不定,故此第一步可以在Pattern属性中设置\d+。

2. 再向右观察发现数字后面存在多类型符号:逗号、无符号、冒号、逗号加空格,单一短横线,双短横线,空格,点号,下划线。那么这些符号如何匹配呢,这里就需要用到多字符匹配概念,何为多字符匹配呢?请看《正则表达式知识点100问》中第15问中的解释:

什么是能够与'多种字符'匹配的表达式?

答:使用方括号 [ ] 包含一系列字符,能够匹配其中任意一个字符。用 [^ ] 包含一系列字符,则能够匹配其中字符之外的任意一个字符。同样的道理,虽然可以匹配其中任意一个,但是只能是一个,不是多个。

从定义来看,多字符匹配具有'或'的功能,满足了匹配多样性。

故此我们可以继续添加Pattern属性[.\s_、:,-]+,这还不行,因为第二个单元格序号和标题之间没有任何字符,怎么办呢?我们还需要继续丰富Pattern属性|\d+,这样就全覆盖了所有情况。

3、 VBE窗口

如何从混杂字符串中提取标题?

4、 代码分享

Sub 提取标题7()

Dim regx As Object, rng As Range, n%

Set regx = CreateObject('vbscript.regexp')

With regx

.Global = True

.Pattern = '\d+[.\s_、:,-]+|\d+'

For Each rng In [a1:a11]

n = n + 1

Cells(rng.Row, 8) = .Replace(rng, '')

Next

End With

End Sub

5、 总结

这里要特别强调如下:

1. 点号'.'必须置于方括号[]首位,置于其他位置均提示出错,如下图所示:

如何从混杂字符串中提取标题?

2. 点号'.'前面加不加\均可,不加是因为在[]内判定为一个字符,加\是把点号作为任意字符的代表,\.则指点号本身。详情请查阅《正则表达式知识点100问》中有关问答。

3. 多字符匹配括号内的字符不管有多少种单每一个类型字符必须在数量上=1,如果需要匹配多次可以在[]外添加量词,新手在这方面要注意。

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多