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的意思。
本文暂时没有评论,来添加一个吧(●'◡'●)