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

网站首页 > 开源技术 正文

如何提取指定开头和结尾的字符串并以三种形式显示结果?

wxchong 2024-08-03 03:06:56 开源技术 43 ℃ 0 评论

1、 题目

如下图所示,"要求:提取开头为华南和华东和东北,结尾为一部、三部和五部的部门,并按如下三种方式分别显示结果:

1. 与目标单元格同行对应显示。

2. 独立集中显示。

3. 阶梯状显示。

2、 解题思路

1. 先看Patttern属性,从题目要求来看,如果要筛选开头和结尾指定的目标字符串且并不是唯一,那就需要用到"或"元字符,即|。又因为开头和结尾的中间部门存在多个多个字符,故此需要用到任意院子和>=1的量词,即.+,或.{1,}.

2. 若要与目标单元格同行对应显示,就需要首先获取目标单元格的行号,对此我们可以设置rng变量,将rng多为结果所在单元格的行号就行了,即cells(rng.row,2),2指第二列。

3. 若要实现独立集中显示,就需要显示结果由自己独立的行列号,故此不能使用rng变量,对此我们可以借助foreach遍历中使用N变量,将他作为结果单元格的行号,即可自上而下逐行显示,即cells(n,3),3指第三列。

4. 若要阶梯状显示,就需要行列号都随N的变化而同步变化,只需要用n+1作为列号即可逐列显示,即cells(n,n+1)。

三 、VBE窗口

4、 代码分享

'与目标单元格同行对应显示结果

Sub 按照开头和结尾的要求提取字符1()

Dim regx As Object, rng, mat, k, n%

Set regx = CreateObject("Vbscript.regexp")

With regx

.Global = True

.Pattern = "^(华南|华东|东北).*(一部|三部|五部)#34;

For Each rng In [a1:a25]

Set mat = .Execute(rng)

For Each k In mat

n = n + 1

Cells(rng.Row, 2) = k

Next

Next

End With

End Sub

第二种和第三种只需要改一下行列号即可。

5、 总结

1. N=n+1的意思是每一次n+1的结果都作为下一次加数n,这样就实现了一种循环,如果不对n值设初值,默认n=0, 当n=0时N=1。

2. +1作为等差值,可以根据需要修改。

3. 这种等式多用在foreach、doloop等循环语句中。

Tags:

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

欢迎 发表评论:

最近发表
标签列表