[英]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。
你也可以使用像 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.