如何在数字和它的子字符串上分割一个字符串?

5

如何根据数字和子字符串拆分字符串?

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

我尝试使用Regex.Split()函数,但无法确定哪种模式适用。

有什么想法吗?


什么是“数字和子字符串”?什么是子字符串?您的子字符串中可以出现哪些字符? - Mark Byers
4个回答

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

4

我认为您需要寻找两种模式:

  • 数字序列
  • 字母序列

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

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


3

首先,您要求“数字”,但没有具体说明您的意思。

如果您指的是“0-9之间的数字”,则需要使用字符类[0-9]。还有字符类\d,除了0-9之外,还匹配其他一些字符。

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

我假设您不对负数、包含小数点、外文数字(如五)等感兴趣。

在这里,Split不是正确的解决方案。您似乎想要对字符串进行分词而不是分割它。您可以使用Matches而不是Split来实现此目的:

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

1
不要使用Regex.Split,而是使用Regex.Match:
var m = Regex.Match("34AG34A", "([0-9]+|[A-Z]+)");
while (m.Success) {
    Console.WriteLine(m);
    m = m.NextMatch();
}

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接