拆分由任何非数字字符串分隔的数字
Posted
技术标签:
【中文标题】拆分由任何非数字字符串分隔的数字【英文标题】:Split numbers delimited by any non numeric string 【发布时间】:2020-09-19 06:35:13 【问题描述】:我需要拆分一个字符串,其中的数字由任何非数字字符串分隔。 即
"1111/222**3333333///44/ 55555"
我需要得到字符串数组:
[0] 1111
[1] 222
[2] 3333333
[3] 44
[4] 55555
我找到了很多正则表达式示例,但没有一个是正确的。 谢谢。
【问题讨论】:
为什么不在\D+
上拆分或匹配所有\d+
?
或者手动完成,将字符串作为IEnumerable<char>
并使用char.IsDigit
和StringBuilder 的实例(甚至是同一个)
如果我匹配 \d+ 我得到一个包含所有数字的字符串,而不是一个带有分隔数字的数组。如果我在 \d+ 上拆分,我会得到一个带有 / ** /// / 的数组
大小写在 \d 和 \D 之间很重要。一个用于匹配数字,一个用于匹配非数字。
【参考方案1】:
Regex.Split(String, String)
将输入字符串拆分为由正则表达式模式定义的位置处的子字符串数组。
在你的情况下,任何一组一个或多个非数字字符的模式都是@"[^\d]+"
,所以你的代码应该是这样的:
const string pattern = @"[^\d]+";
var input = "1111/222**3333333///44/ 55555";
var output = Regex.Split(input, pattern);
更新:
正如 @ggorlen 在 cmets 中所建议的那样,匹配非数字的更简单的等效模式是 @"\D+"
而不是 @"[^\d]+"
。
【讨论】:
不需要“更新:”。只需将[^\d]
更改为\D
。您可以像您所做的那样感谢并感谢@ggorlen 在答案中的建议,或者为了保持答案的简洁,在评论中。当我认为您已经看到此评论时,我会删除它。以上是关于拆分由任何非数字字符串分隔的数字的主要内容,如果未能解决你的问题,请参考以下文章