В столбце Excel у меня есть такие данные, как:
Audi (ADI), Mercedes (modelx) (MEX), Ferrari super fast, high 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, похоже, не позволяет смотреть назад.
Есть идеи?
"\([^)]+\)"
... и при втором совпадении замените все с , вы получите строку без сокращений, которую затем можно разделить на имена. - person Naresh   schedule 12.07.2021Audi
,Mercedes (modelx)
иFerrari super fast, high PS
? - person Wiktor Stribiżew   schedule 12.07.2021