正则expression式提取正好8位数字或正好7位数字的数字,如果数字有更多数字,则丢弃
我需要从我的excel文件中的一列中提取7位数字或8位数字的数字,并且需要丢弃具有更多数字的任何数字。
例如,假设这些是一些值
2569123659 | 从大于8位数字中提取任何内容
2456789 | 2456789 | 提取7位数字
15034891 | 15034891 | 提取8位数字
2569123659 45785612 | 45785612 | 仅提取8位数字
2456789 2569123659 | 2456789 | 只提取7位数字
美国广播公司#2456789 | 2456789 | 仅提取数字
ABC15034891DSC | 15034891 | 仅提取数字
ABC15034891 ### | 15034891 | 仅提取数字
以下是我尝试过的一些表情
strPattern =“[0-9] {7}([0-9] {1})?”
结果:错误的结果
2569123659 | 2456789
2456789 | 15034891
15034891 | 25691236
2569123659 45785612 | 2456789
2456789 2569123659 | 2456789
美国广播公司#2456789 | 2456789
ABC15034891DSC | 15034891
ABC15034891 ### | 15034891
strPattern =“(\ d {8} | \ d {7})”
结果:仍然错误的结果
2569123659 | 25691236
2456789 | 2456789
15034891 | 15034891
2569123659 45785612 | 25691236
2456789 2569123659 | 2456789
美国广播公司#2456789 | 2456789
ABC15034891DSC | 15034891
ABC15034891 ### | 15034891
帮我纠正这个regexpression式,以便处理这个场景。 我只需要提取正确的数字。 我需要避免从另一个数字提取更多的数字。
任何forms的帮助将不胜感激。
提前致谢
根据这里提供的答案,我也尝试过
strPattern =“\ b(\ d {7,8})\ b”
结果:仍然错误的结果
2569123659 |
2456789 | 2456789
15034891 | 15034891
2569123659 45785612 | 45785612
2456789 2569123659 | 2456789
美国广播公司#2456789 |
ABC15034891DSC |
ABC15034891 ### |
仍然不准确
使用以下正则expression式:
(?:^|\D)(\d{7,8})(?!\d)
您的7或8位数字将在.Submatches(0)
。
(?:^|\D)
匹配string的开始位置或非数字位置,如果在七位或八位数字之后立即find数字,则负向预测(?!\d)
不匹配。
查看正则expression式演示 。
看一个例子代码:
Sub GetResults() Dim rExp As Object, allMatches As Object, match As Object Dim text As String text = "ABC15034891###" Set rExp = CreateObject("vbscript.regexp") With rExp .Global = True .MultiLine = False .pattern = "(?:^|\D)(\d{7,8})(?!\d)" End With Set allMatches = rExp.Execute(text) For Each match In allMatches Debug.Print(match.SubMatches.Item(0)) Next End Sub
尝试\D(\d{7,8})\D
:
\b -> word boundary \d -> digit [0-9] \D -> non digit
演示: https : //regex101.com/r/2R5HRN/2