VBA – 正则expression式与variables分离
我正在寻找一个多个大写字母的第一个实例后拆分单元格。
例1:
input1: 4楼InformatiqueNoosavilleSep
期望的输出1:NoosavilleSep
模式:拆分应该发生在最后一个字的大写字母的第二个实例。 “InformatiqueNoosavilleSep”
例2:
input:地板13 InformatiqueSurfers ParadiseSep
输出: Surfers ParadiseSep
模式:拆分不应该发生在最后一个字,而是在“InformatiqueSurfers”。
问题:find在哪里拆分单词的模式不同于单元格到另一个单元格。
我们知道:
1:如果最后一个单词包含三个大写字母,它总是在这个单词,我们要拆分string。例子1
2:如果最后一个单词只包含两个大写字母“ParadiseSep”,我们必须将string拆分为之前的单词。 例题
我发现这个代码允许拆分string与大写locking并添加空格。
Dim objRegex As Object Set objRegex = CreateObject("vbscript.regexp") With objRegex .Global = True .Pattern = "([az])([AZ])" SplitCaps = .Replace(strIn, "$1 $2") End With End Function
正如我正在试图学习VBA这正则expression式越来越远离我的境界。
谢谢阅读!
您正在寻找多个大写字母的第一个实例。 让我们build立一个正则expression式来作为第一步。
你正在寻找大写字母: [AZ]
他们必须在同一个字,所以在两个大写字母之间,你只能有小写字母: [az]
在两个大写字母之间可以有零个或多个小写字母: [AZ][az]*[AZ]
这个事件之后的任何事情都应该是结果的一部分,所以我们也对这个string的其余部分感兴趣。 这可以是零或更多的任何字符出现: [AZ][az]*[AZ].*
在此之前,我们也可以有零个或更多的任何字符出现。 但是我们想要find第一个例子 ,所以我们必须通过附加一个“非贪婪” 对它: .*?[AZ][az]*[AZ].*
现在我们已经完成了一个正则expression式来find你正在寻找的东西。
第二步:您想要在find的模式中从第二个大写字母开始分割单词。 所以我们在大写字母之前和expression式结尾之后加上括号(圆括号): .*?[AZ][az]*([AZ].*)
第三步:您要使用圆括号检索第二步中分离的string部分。 我们使用$1
,这意味着正则expression式中第一组括号的内容: .Replace(inputString, "$1")
如果我们把它放在一个vba函数中,我们会得到如下的东西:
Function SplitMultipleCaps(inputString As String) Dim objRegex As Object Set objRegex = CreateObject("vbscript.regexp") With objRegex .Global = False .Pattern = ".*?[AZ][az]*([AZ].*)" SplitMultipleCaps = .Replace(inputString, "$1") End With End Function
注:我把.Global = False
因为你只想做一次。 这个函数也可以用.Global = True
,但是我觉得在这种情况下False
更合适。
尝试这个:
Function afterFirstUpperCaseWord(strIn As String) Dim objRegex As Object Set objRegex = CreateObject("vbscript.regexp") With objRegex .Global = True .Pattern = "\w+ \d+ [AZ][az]+ ?(.*)" afterFirstUpperCaseWord = .Replace(strIn, "$1") End With End Function