我有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
答案 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语句以获得所需的结果。