C# 拆分由任何非数字字符串分隔的数字

C# 拆分由任何非数字字符串分隔的数字,c#,regex,split,C#,Regex,Split,我需要拆分一个字符串,其中的数字由任何非数字字符串分隔。 i、 e 我需要获取字符串数组: [0] 1111 [1] 222 [2] 3333333 [3] 44 [4] 55555 我发现了很多正则表达式的例子,但没有一个是正确的。 谢谢。在正则表达式模式定义的位置将输入字符串拆分为子字符串数组 在您的情况下,由一个或多个非数字字符组成的任何组的模式都是@[^\d]+,因此您的代码如下所示: const string pattern = @"[^\d]+"; var input = "111

我需要拆分一个字符串,其中的数字由任何非数字字符串分隔。 i、 e

我需要获取字符串数组:

[0] 1111
[1] 222
[2] 3333333
[3] 44
[4] 55555
我发现了很多正则表达式的例子,但没有一个是正确的。 谢谢。

在正则表达式模式定义的位置将输入字符串拆分为子字符串数组

在您的情况下,由一个或多个非数字字符组成的任何组的模式都是@[^\d]+,因此您的代码如下所示:

const string pattern = @"[^\d]+";
var input = "1111/222**3333333///44/ 55555";
var output = Regex.Split(input, pattern);
更新: 一种更简单的匹配非数字的等效模式是@\D+,而不是@ggorlen在注释中建议的@[^\D]+。

在正则表达式模式定义的位置将输入字符串拆分为子字符串数组

在您的情况下,由一个或多个非数字字符组成的任何组的模式都是@[^\d]+,因此您的代码如下所示:

const string pattern = @"[^\d]+";
var input = "1111/222**3333333///44/ 55555";
var output = Regex.Split(input, pattern);
更新:
一个更简单的匹配非数字的等效模式是@\D+,而不是@[^\D]+,正如@ggorlen在评论中所建议的那样。

为什么不在\D+上拆分或匹配所有\D+?或者手工操作,将字符串作为IEnumerable进行遍历,并使用char.IsDigit和StringBuilder的实例,甚至是同一个实例如果匹配\d+我将得到一个包含所有数字的字符串,而不是一个包含分隔数字的数组。如果我在\d+上拆分,我会得到一个带有//**///大小写的数组,大小写在\d和\d之间。一个用于匹配数字,一个用于匹配非数字。为什么不在\d+上拆分或匹配所有\d+?或者手动执行,将字符串作为IEnumerable进行遍历,并使用char.IsDigit和StringBuilder的实例,甚至是同一个实例如果匹配\d+我将得到一个包含所有数字的字符串,而不是一个包含分隔数字的数组。如果我在\d+上拆分,我会得到一个带有//**///的数组,大小写在\d和\d之间。一个用于匹配数字,一个用于匹配非数字。不需要更新:。只需将[^\d]更改为\d即可。您可以在回答中感谢@ggorlen的建议,就像您所做的那样,或者,为了保持答案的清晰,在评论中感谢@ggorlen。我会在您看到后删除此评论。不需要更新:。只需将[^\d]更改为\d即可。您可以在回答中感谢@ggorlen的建议,就像您所做的那样,或者,为了保持答案的清晰,在评论中感谢@ggorlen。我想你看到后会删除这条评论。