C#Regex获取所有可能的匹配项

Rod*_*dez 2 c# regex

我想提取这个正则表达式的所有出现

\d{7,8}
Run Code Online (Sandbox Code Playgroud)

(每个长度为7或8的数字)

输入可能是这样的

asd123456789bbaasd

我想要的是一个数组:

["1234567", "12345678", "2345678", "23456789"]
Run Code Online (Sandbox Code Playgroud)

所有可能出现的数字,有7或8个长度.

Regex.Matches的工作方式不同,它会返回所有连续出现的匹配项.... ["12345678"]

任何的想法?

bob*_*ble 6

对于重叠匹配,您需要在前瞻中捕获.

(?=(\d{7}))(?=(\d{8})?)
Run Code Online (Sandbox Code Playgroud)

在regex101上查看此演示

  • (?=(\d{7}))第一个捕获组是强制性的,将捕获任何7位数
  • (?=(\d{8})?)第二个捕获组是可选的(在相同位置触发)

因此,如果有7位数匹配,则它们将在组(1)中,如果8位匹配,则在组(2)中.在.NET Regex中,您可以为两个组使用一个名称.

对于获得7场位数的比赛只要有8领先,删除?(\d{8}) 想在这个演示.