VBA正则表达式匹配模式

时间:2018-09-26 14:32:46

标签: vba excel-vba excel-formula access-vba

我有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 :(得分:4)

您根本不应该使用正则表达式。一个简单的Like语句即可。

只需使用strinput Like "RF#########"。如果以RF(不区分大小写)开头,然后有9位数字,则返回true,否则返回false。

答案 1 :(得分:1)

将其包裹在边界内吗?

\bRF\d{9}\b

尝试here

\ 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或RF开头的前导。一种可能是:

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

尝试it

更熟悉正则表达式的人无疑会建议有效的正则表达式方法。

答案 2 :(得分:0)

您还可以使用字符串函数,例如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语句以获得所需的结果。