【发布时间】:2021-09-21 18:03:44
【问题描述】:
在 Excel 列中,我有如下数据:
“奥迪 (ADI)、梅赛德斯 (modelx) (MEX)、法拉利超快、高 PS (FEH)”
有数百种型号由名称和括号中三个大写字母的缩写来描述。
我只需要提取名称和缩写词来分隔单元格。我通过以下模块成功地为缩写词做这件事:
Function extrABR(cellRef) As String
Dim RE As Object, MC As Object, M As Object
Dim sTemp As Variant
Const sPat As String = "([A-Z][A-Z][A-Z][A-Z]?)" ' this is my regex to match my string
Set RE = CreateObject("vbscript.regexp")
With RE
.Global = True
.MultiLine = True
.Pattern = sPat
If .Test(cellRef) Then
Set MC = .Execute(cellRef)
For Each M In MC
sTemp = sTemp & ", " & M.SubMatches(0)
Next M
End If
End With
extrABR = Mid(sTemp, 3)
End Function
但是,我无法为名称这样做。我想只用以下正则表达式交换正则表达式:(^(.*?)(?= \([A-Z][A-Z][A-Z])|(?<=, )(.*)(?= \([A-Z][A-Z][A-Z])),但 VBA 似乎不允许向后看。
有什么想法吗?
【问题讨论】:
-
你会得到一个带有
"\([^)]+\)"的缩写集合...并且用第二个匹配替换所有那些用“”,你会得到一个没有缩写的字符串,然后你可以将其拆分为名称。跨度> -
你的意思是需要获取
Audi、Mercedes (modelx)和Ferrari super fast, high PS组成的数组吗?
标签: excel regex vba function lookbehind