C# 正则表达式拆分为非零数字后跟任意数量的零

C# regex split for A non-zero digit followed by an arbitrary number of zero

我有一个数字作为字符串“10009003”我想使用正则表达式将它拆分以始终获得第一个非零数字并包括所有尾随零。然后获取下一个非零数字及其尾随零。如果一个非零数字没有尾随零,就抓住它。

上面的数字字符串应该导致 array/list of length/count 3 如下 [0] = 1000, [1] = 900, [2] =3

我试过这个代码;

var someNumberString = "10009003";     
string s = @"[^1-9]+";
string[] strArray = Regex.Split(someNumberString, s);

只输出以下但缺少零; [0] = 1 , [1] = 9 , [2] = 3

如何让正则表达式包含尾随零?

在此先感谢您的帮助:)

您可以使用这个基于后视和前视的正则表达式:

var someNumberString = "10009003";     
string s = @"(?<=[1-9]0*)(?=[1-9])";
string[] strArray = Regex.Split(someNumberString, s);

Console.Write(string.Join(" ", strArray));
//=> 1000 900 3

Online Demo

解释:

  • (?<=[1-9]0*) (Lookbehind) - 如果当前位置前面有一个非零数字和 0 个或多个零
  • (?=[1-9]) (Lookahead) - 如果当前位置后跟一个非零数字

您可以使用如下所示的 regex.Matches 函数。

String input = @"10009003";
Regex rgx = new Regex(@"[1-9]+0*");
foreach (Match m in rgx.Matches(input))
Console.WriteLine(m.Groups[0].Value);

[1-9] 匹配从 1 到 9 的数字。0* 匹配零个或多个 0

IDEONE