Страницы: 1
RSS
RegExp. Pattern из массива. Возможные ограничения
 
Мяв!
Планирую использовать макрос типа
Код
Sub test()
    Dim ar, s, t
    Dim cl, m, mm
    
    ar = [h1:h4].Value
    s = Join(Application.Transpose(ar), "|")
    
    Dim RExp As Object
    Set RExp = CreateObject("VBScript.RegExp")
    RExp.Global = True: RExp.IgnoreCase = True
    
    RExp.Pattern = "(" & s & ")" & ",? ?"
    
    For Each cl In [a1:a5]
        If RExp.test(cl.Value) Then
            Set m = RExp.Execute(cl)
            mm = m(0).SubMatches(0)
            t = RExp.Replace(cl.Value, "")
            cl.Next = mm
            cl.Next.Next = t
        End If
    Next
End Sub

Есть ли какие подводные камни с длиной строки, или количествам элементов "или" (элементов массива)?
Ограничения Application.Transpose не в счет.
Если нет, напишите, буду использовать, если есть, напишите, буду думать.

Пока планируемый размер массива ~ 300 элементов (слов)

Альтернативные решения не интересуют.
 
Доброе время суток.
Цитата
RAN написал:
Ограничения Application.Transpose не в счет.
Тогда проблем нет. Может быть только по памяти на 32-бит системах, и то гипотетические. Правда, не стоит забывать, что заключённые в | слова в шаблоне могут содержать комбинации управления ;) , например (кг\м3)
Цитата
RAN написал:
If RExp.test(cl.Value) Then
   Set m = RExp.Execute(cl)
Что за любовь к такой фигне? Не лучше ли
Код
Set m = RExp.Execute(cl)
If m.Count > 0 Then
    ' вот тут чего-то и делаем с найденным
End If
Изменено: Андрей VG - 06.03.2019 16:22:09
 
Андрей, спасибо.
Цитата
Андрей VG написал:
Что за любовь к такой фигне? Не лучше ли
Это же тестовая рыба.  :)
По факту будет вообще несколько паттернов, и для одних будет использован Replace, для других Execute.
Страницы: 1
Наверх