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

回到顶部