我需要从Excel工作表中的文本字符串中提取一个3位数字。 我已经编写了我的自定义函数来返回基于模式的子字符串,这很好,它有效。这是打败我的模式。 因此,示例可能包括:
我不是正则表达式专家,但通常我会使用(?< = \ D)\ d {3} \ b 这适用于所有测试I& #39;尝试过,但VBA似乎不支持(?< = x)。仅使用\ D \ d {3} \ b并修剪前导字符,但会冒犯我的感官。
我正在使用标准的VBscript Regular Expressions 5.5库。
这方面的实际背景是我有一个大型工作表,每行都有一个注释字段。政策一直是用户在这个领域的某个地方包括他们的成本中心。它可以出现在该字段的任何位置,它始终是一个三位数字,它后面跟着一个字边界,并且它总是以非数字字符开头。
答案 0 :(得分:0)
你可以选择反向引用解决方案:
\D(\d{3})\b
如果您只对3位数感兴趣,可以使用此处描述的正则表达式并重用第一个捕获组\1
(可能是VB中的$1
)
答案 1 :(得分:0)
我最好的猜测是使用:\D(\d{3})\b
,如
Dim myRegExp, ResultString, myMatches, myMatch As Match
Dim myRegExp As RegExp
Set myRegExp = New RegExp
myRegExp.Pattern = "\D(\d{3})\b"
Set myMatches = myRegExp.Execute(SubjectString)
If myMatches.Count >= 1 Then
Set myMatch = myMatches(0)
If myMatch.SubMatches.Count >= 1 Then
ResultString = myMatch.SubMatches(1-1)
Else
ResultString = ""
End If
Else
ResultString = ""
End If