VBA - 正则表达式拆分可变
我期待与多个字母大写单词的第一个实例后,细胞分裂。VBA - 正则表达式拆分可变
实施例1:
输入1:楼层4 InformatiqueNoosavilleSep
希望的输出1:NoosavilleSep
图样:的应该分裂中的最后一个字出现在大写的第二实例。 “InformatiqueNoosavilleSep”
实施例2:
输入:楼层13个InformatiqueSurfers ParadiseSep
输出:冲浪者ParadiseSep
图样:不应该发生在分割最后一个字,但在“InformatiqueSurfers”而不是。
的问题:该图案以找到分裂字从另一个小区而不同。
我们知道:
1:如果最后一个字包含三个大写字母,它总是在这个词,我们要拆分的string.Example1
2:如果最后一个字只包含两个大写字母“ParadiseSep”,我们必须在它之前的单词上分割字符串。例题
我发现这个代码,允许与大写锁定分割字符串,并添加一个空格。
Dim objRegex As Object Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Global = True
.Pattern = "([a-z])([A-Z])"
SplitCaps = .Replace(strIn, "$1 $2")
End With
End Function
因为我正在学习VBA,所以这个正则表达式已经有点超出了我的境界。
感谢您的阅读!
回答:
试试这个:
Function afterFirstUpperCaseWord(strIn As String) Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Global = True
.Pattern = "\w+ \d+ [A-Z][a-z]+ ?(.*)"
afterFirstUpperCaseWord = .Replace(strIn, "$1")
End With
End Function
回答:
您正在寻找多盖一个单词的第一个实例。让我们构建一个正则表达式,以此作为第一步。
您正在寻找大写字母:[A-Z]
他们必须是同一个词,所以两个大写字母之间只能有小写字母:[a-z]
可以有零个或多个小写字母2个大写字母之间:出现这种情况后[A-Z][a-z]*[A-Z]
什么应该是结果的一部分,所以我们也是在这个字符串的剩余权益。这可以是零个或多个任何字符的出现:[A-Z][a-z]*[A-Z].*
在这种情况发生之前,我们也可以有零个或多个任何字符的出现。但是,我们希望找到一审,所以我们必须通过附加?
它使我们的正则表达式的那部分“非贪婪”:.*?[A-Z][a-z]*[A-Z].*
现在我们已经完成了一个正则表达式查找你正在寻找。
第二步:您想要在找到的模式中将第二个大写字母开始的单词分开。所以我们把括号(圆括号中)仅仅是大写字母前后表达结束后开始:.*?[A-Z][a-z]*([A-Z].*)
第三步:您要检索您使用在第二步中分离出的字符串的一部分括号。我们通过使用$1
,这意味着在正则表达式的第一组括号中的内容:.Replace(inputString, "$1")
如果我们把这个在VBA函数,我们会得到这样的:
Function SplitMultipleCaps(inputString As String) Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Global = False
.Pattern = ".*?[A-Z][a-z]*([A-Z].*)"
SplitMultipleCaps = .Replace(inputString, "$1")
End With
End Function
注:我把.Global = False
,因为你只想做一次。该函数也可以与.Global = True
一起使用,但我觉得在这种情况下False
更合适。
以上是 VBA - 正则表达式拆分可变 的全部内容, 来源链接: utcz.com/qa/258870.html