Шаблон соответствия регулярных выражений VBA - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть записи типа RF123456789, RF1234567890 и т. Д.

Я просто хочу сопоставить записи, начинающиеся с 'RF', за которыми следуют ровно 9 цифр номера.Если оно больше 9 цифр или меньше 9 цифр, должно отображаться Invaid.Я написал приведенный ниже код, но проблема в том, что если число больше 9, оно также отображается действительным.Я понимаю, что я написал для проверки, только если он начинается с RF и сопровождается 9 цифрами, поэтому в случае 10 цифр он явно соответствует моему шаблону.Можно ли как-нибудь ограничить его только 9 цифрами, а не 10?

Set myrange = Range("C2:C" & Rng)
For Each c In myrange
    strinput = c.Value
    patn = "([r|R][f|F][0-9]{9})"
    If patn <> "" Then
        With regex
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = patn
        End With
        If regex.Test(strinput) Then
            c.Offset(0, 5) = "Valid"
        Else
            c.Offset(0, 5) = "Invalid"
        End If
    End If

    ''checking Column D and E are matching or not''
    If c.Offset(0, 1) <> "" Then
        If c.Offset(0, 1) = c.Offset(0, 2) Then
            c.Offset(0, 6) = "Matching"
        Else
            c.Offset(0, 6) = "Not Matching"
        End If
    Else
        c.Offset(0, 6) = "Empty"
    End If
Next

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Обернуть это в границы?

\bRF\d{9}\b

Попробуйте здесь

\ bRF \ d {9} \ b / gm

\b утверждение позиции на границе слова (^\w|\w$|\W\w|\w\W)

RF соответствует буквам RF буквально (с учетом регистра)

\d{9} соответствует цифре (равно [0-9])

{9} Квантификатор - соответствует ровно 9 раз

\b Утверждение позиции на границе слова (^\w|\w$|\W\w|\w\W)


Обновление:

Есть многоиз способов заявить, имея 2 номера или РФ.Один из них может быть:

\b(\d{2}|RF)\d{9}\b

Попробуйте it .

Кто-то, более знакомый с регулярным выражением, может, без сомнения, посоветовать эффективные методы регулярного выражения.

0 голосов
/ 26 сентября 2018

Вы также можете использовать строковые функции, такие как left () right () len () и isnumeric ()

Чтобы проверить, что вся строка имеет длину 11 символов (RF + 9 цифр), вы можетеиспользуйте:

If len(yourstring) = 11 then

Чтобы проверить, что строка начинается с RF, используйте:

If left(yourstring,2)="RF" then

Чтобы проверить, что последние 9 символовнумерует только первое измерение варианта:

dim num_check as variant
num_check = right(yourstring,9)
If isnumeric(num_check) = False then

Вы можете вкладывать или комбинировать эти операторы if для получения желаемого результата.

0 голосов
/ 26 сентября 2018

Вы не должны использовать регулярные выражения для этого вообще.Подойдет простое выражение Like.

Просто используйте strinput Like "RF#########".Возвращает true, если начинается с RF (без учета регистра), а затем имеет 9 цифр, иначе false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...