gpt4 book ai didi

regex - VBA - 带有变量的正则表达式拆分

转载 作者:行者123 更新时间:2023-12-04 21:54:31 25 4
gpt4 key购买 nike

我希望在具有多个大写字母的单词的第一个实例之后拆分一个单元格。

示例 1:

输入1: Floor 4 InformatiqueNoosavilleSep

期望的输出 1:NoosavilleSep

图案:拆分应发生在最后一个单词中大写的第二个实例处。 "InformatiqueNoosavilleSep"

示例 2:

输入: 13 楼 InformatiqueSurfers ParadiseSep

输出:冲浪者天堂九月

图案:拆分不应出现在最后一个单词上,而是出现在“InformatiqueSurfers”上。

问题:找到在哪里拆分单词的模式因单元格而异。

我们所知道的:

1:如果最后一个单词包含三个大写字母,我们总是要在这个单词处拆分字符串。Example1

2:如果最后一个单词只包含两个大写字母“ParadiseSep”,我们必须在它之前的单词上拆分字符串。示例 2

我发现这段代码允许使用大写锁定拆分字符串并添加空格。

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 时,这个正则表达式有点超出我的领域。

谢谢阅读!

最佳答案

您正在寻找具有多个大写字母的单词的第一个实例。第一步,让我们构建一个正则表达式来找到它。

您正在寻找大写字母:[A-Z]
它们必须在同一个单词中,所以在两个大写字母之间只能有小写字母:[a-z]
两个大写字母之间可以有零个或多个小写字母:[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在这种情况下更合适。

关于regex - VBA - 带有变量的正则表达式拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47613786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com