正则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