многоточечные регулярные выражения соответствуют меньше для циклов и меньше повторной инициализации класса. оптимизация - PullRequest
1 голос
/ 12 марта 2012

Есть ли способ сделать несколько совпадений регулярных выражений в vba без создания экземпляров нескольких экземпляров объекта regexp? Например, я хочу сделать несколько точек сопоставления регулярных выражений между несколькими различными полями данных.

Для наглядности рассмотрим это.

 
column 1       column 2         column 3

AAATDD         Airplane         Transportation/Airplane
BBBTDD         Bus              Transportation/Bus
CCCFDD         Chocolate        Food/Chocolate
DDDFDD         Dog              Food/Potato

Итак, как вы можете видеть, первая буква в столбце 1 - это A, что соответствует описанию в столбце 2 для самолета, которое соответствует типу перевозки (обозначается буквой T в столбце 1 «AAATDD») в столбце 3 для самолета. Все хорошо. Но в столбце 1 есть особая запись для собаки, которая указана как еда и картофель.

Прямо сейчас у меня есть (псевдо) код, подобный этому:

for i = 1 to endpoint
    set regexp as new regexp
    regexp.pattern is myPattern
    set colmatches = regexp.execute()

    If Column1_Entry(i) = myMatch.value then
         pass test
    Else
         throw exception
    End if
 next i

но проблема в том, что я могу проверить только регулярное выражение, заданное моим шаблоном. Например, мои следующие несколько строк должны проверить те же значения, просто ища другую вещь.

Когда я буду готов выполнить следующий набор совпадений, чтобы определить достоверность, т. Е. В столбце 3 сопоставление транспорта / «Самолет» с «Самолетом» в столбце 2, мне нужно сбросить регулярное выражение и сбросить myPattern. Есть ли что-нибудь вокруг этого? или способ сохранить регулярные выражения в виде списка или массива? Так их можно перебрать по очереди? Любая помощь будет принята с благодарностью.

1 Ответ

3 голосов
/ 13 марта 2012
Dim arr

arr = Array("pattern1","pattern2","pattern3")

set regexp as new regexp

for i = 1 to endpoint     
     for n = lbound(arr) to ubound(arr)
        regexp.pattern = arr(n)
        set colmatches = regexp.execute()      
        If Column1_Entry(i) = myMatch.value then          
           pass test     
        Else          
           throw exception     
        End if  
    next n
next i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...