我正在尝试使用正则表达式从10位数字中获取所有可能的连续4位数字.喜欢
num = "2345678901";
Run Code Online (Sandbox Code Playgroud)
输出:
2345,3456,4567,5678,6789,7890,8901
这些简单的正则表达式不起作用:
[\d]{4}
(\d\d\d\d)
Run Code Online (Sandbox Code Playgroud)
您需要使用(?=(\d{4}))正则表达式匹配重叠匹配.
请参阅正则表达式演示
您正在使用的正则表达式都使用4位数的文本块,因此重叠值不匹配.使用(?=...)正向前瞻,您可以测试输入字符串中的每个位置,并从这些位置捕获 4个数字块,而不消耗字符(即,不将正则表达式引擎指针移动到这4个数字块之后的位置).
var data = "2345678901";
var res = Regex.Matches(data, @"(?=(\d{4}))")
.Cast<Match>()
.Select(p => p.Groups[1].Value)
.ToList();
Console.WriteLine(string.Join("\n", res));
Run Code Online (Sandbox Code Playgroud)