如何在数字和子串上拆分字符串?

时间:2010-09-06 08:50:28

标签: c# regex string split

如何在数字和子串上拆分字符串?

输入:34AG34A
预期输出:{"34","AG","34","A"}

我尝试使用Regex.Split()函数,但我无法弄清楚哪种模式可行。

有什么想法吗?

4 个答案:

答案 0 :(得分:8)

正则表达式(\d+|[A-Za-z]+)将返回您需要的组。

答案 1 :(得分:4)

我认为你必须寻找两种模式:

  • 一系列数字
  • 一系列字母

因此,我会使用([a-z]+)|([0-9]+)

例如,System.Text.RegularExpressions.Regex.Matches("asdf1234be56qq78", "([a-z]+)|([0-9]+)")返回6个组,包含“asdf”,“1234”,“be”,“56”,“qq”,“78”。

答案 2 :(得分:2)

首先,你要求“数字”但不指明你的意思。

如果您的意思是“0-9中的数字”,那么您需要字符类[0-9]。除了0-9之外,还有character class \d与其他一些角色匹配。

  

\ d匹配任何十进制数字。它等同于\ p {Nd}正则表达式模式,它包括标准的十进制数字0-9以及许多其他字符集的十进制数字。

我假设您对负数,包含小数点的数字,五等外国数字等不感兴趣。

斯普利特在这里不是正确的解决方案。您似乎想要做的是对字符串进行标记,而不是将其拆分。您可以使用Matches代替Split

来执行此操作
string[] output = Regex.Matches(s, "[0-9]+|[^0-9]+")
    .Cast<Match>()
    .Select(match => match.Value)
    .ToArray();

答案 3 :(得分:1)

请勿使用Regex.Split,请使用Regex.Match:

var m = Regex.Match("34AG34A", "([0-9]+|[A-Z]+)");
while (m.Success) {
    Console.WriteLine(m);
    m = m.NextMatch();
}

将此转换为数组留给读者练习。 : - )