【发布时间】:2017-12-03 18:06:32
【问题描述】:
我希望在具有多个大写字母的单词的第一个实例之后拆分一个单元格。
示例 1:
输入 1: 4 楼 InformatiqueNoosavilleSep
期望的输出 1:NoosavilleSep
模式:拆分应该出现在最后一个单词中大写的第二个实例上。 "InformatiqueNoosavilleSep"
示例 2:
输入:13 楼 InformatiqueSurfers ParadiseSep
输出: Surfers 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 时,这个正则表达式有点超出我的领域。
感谢阅读!
【问题讨论】:
-
这似乎更像是一个解析问题而不是正则表达式问题,尽管我不是专家。换句话说:从头开始,找到“单词”。如果它有三个上限,则在那里拆分。否则找到倒数第二个单词并在那里拆分。
-
可能是这样的regex101.com/r/aW2enR/3。查看您最初的问题,当您遇到不同的边缘情况时,似乎要求可能会不断变化
-
是另一种定义它的方式,新值只是“Informatique”之后的单元格值的一部分?
-
所以在你给定的例子2中,输出是正确的(你想要的)还是不正确的?如果不正确,您能否告诉我们您想要的输出(例如 2)是什么?
-
感谢 Slai 对彼得的精彩解释和你的想法,我学到了很多,