编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

V18.学习并掌握使用零宽度断言和勉强模式提取字符串的方法

wxchong 2024-08-03 03:07:14 开源技术 46 ℃ 0 评论

1、 题目

如下如所示,A1单元格是一堆混杂目录,要求按照A2-A15样式从A1中提取目录并自上而下排序:

2、 解题思路

首先对A1单元格中的混杂字符串进行特征分析,每个目录均以""专"+中文数字"

开头,同时""专""字自也是各目录的结尾,除了第一个目录和最后一个目录外,

各目录间以""专""字首尾相连,可以抽检出四种特征:

1.其中"专"题二、四、五、六、八、九、十、十一、十三这几个目录具有共性:

"专"+汉字+空格+汉字+空+"专"字结尾。

2.其中"专"题一、三的特征是:"专"+汉字+空格+汉字+空格+汉字+空格+"专"

字结尾。

3.其中"专"题七、十二的特征是:"专"+汉字+空格+汉字+空格+(此处的汉字不

得为"专"字)汉字+空格+汉字+空格+"专"字结尾。

4."专"题十四:"专"+[一-龢]+\s+[一-龢]+末尾处不得有任何字符。

上述四种特征是"或"的关系,故此需要用到"|"字符,又因为他们共同组成Pattern属性值造成代码过长,故此需用对他们进行(空格+&+空格+_)换行处理,每换一行都要在首位出加英文双引号,结果如下:

3、 VBE截图

4、 代码分享

Sub 提取目录()

Dim regx As Object, mat, k, n%

Set regx = CreateObject("vbscript.regexp")

With regx

.Global = True

.Pattern = "专+[一-龢]+\s+[一-龢]+\s+?(?=专)|" & _

"专+[一-龢]+\s+[一-龢]+\s+[一-龢]+\s+?(?=专)|" & _

"专+[一-龢]+\s+[一-龢]+\s+(?!专)[一-龢]+\s+[一-龢]+\s+?(?=专)|" & _

"专+[一-龢]+\s+[一-龢]+(?!.)"

Set mat = .Execute([a1])

For Each k In mat

n = n + 1

Cells(n + 1, 2) = k

Next

End With

End Sub

5、 总结

1. 本题的解题关键在于A1单元格中的混杂字符串进行分类特征分析,然后根据每组的特征设计出针对性的匹配表达式,本例中分别用到了零宽度断言(正向预搜索)和反向零宽度断言(否定性正向预搜索),相关知识点请点击查阅《正则表达式知识点100问》。

2. 掌握代码过长的换行方法。

3. 理解cells(n+1,1)的横坐标n+1的意思。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表