繁体   English   中英

VBA 正则表达式匹配模式

[英]VBA Regular Expression Matching Pattern

我有 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

您根本不应该为此使用正则表达式。 一个简单的Like语句就可以了。

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

将其包裹在边界内?

\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 个数字或 RF 的领先。 一种可能是:

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

试试

更熟悉正则表达式的人无疑可以就高效的正则表达式方法提出建议。

你也可以使用像 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 语句以获得所需的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM