我在Excel中有以下一系列字符串
/item/index/offid/77203/uSasdf/ASFDFAS/catId/401/subCat/709
每个字符串包含由反斜杠分隔的多个数字。然而,这些数字中的一个是唯一的5位数字,并且每个字符串将仅包含一次这样的5位数字标识符。
我希望我的基于VB的宏从每个字符串中提取出5位数字。
我正在寻找的唯一ID可以是5个或6个字符。它始终是字符串中的第一个数字,我知道一旦达到前面的反斜杠,唯一ID就会终止。
答案 0 :(得分:2)
在大多数正则表达式中,五位数字只是:\d{5}
但也许你可以有几个五位数字,如'/itemindex/12345/12345/77203/', and you want to capture the ones that are guaranteed to be unique, in this case
77203`。
在这种情况下,您需要一个前瞻,如:
^(?=.*(\d{5})(?!.*(\1)))
前瞻断言,后来找不到捕获到第1组的数字(向第1组反向引用(\1)
。)
在VBScript中,对于第一个正则表达式,你可以用这个来拉出整体匹配:
Dim myRegExp, FoundMatch
Set myRegExp = New RegExp
myRegExp.Pattern = "\d{5}"
FoundMatch = myRegExp.Test(SubjectString)
对于第二个正则表达式,我们从组1中检索匹配,你需要这样的东西:
Dim myRegExp, Group1, myMatches, myMatch As Match
Dim myRegExp As RegExp
Set myRegExp = New RegExp
myRegExp.Pattern = "^(?=.*(\d{5})(?!.*(\1)))"
Set myMatches = myRegExp.Execute(SubjectString)
If myMatches.Count >= 1 Then
Set myMatch = myMatches(0)
If myMatch.SubMatches.Count >= 1 Then
Group1 = myMatch.SubMatches(1-1)
Else
Group1 = ""
End If
Else
Group1 = ""
End If