将混合的alphanum字符串分成文本和数字部分的快速方法?

时间:2011-12-17 12:19:48

标签: c# regex string

说我有一个字符串,如

abc123def456

将字符串拆分为数组(例如

)的最佳方法是什么
["abc", "123", "def", "456"]

5 个答案:

答案 0 :(得分:4)

string input = "abc123def456";
Regex re = new Regex(@"\D+|\d+");
string[] result = re.Matches(input).OfType<Match>()
                    .Select(m => m.Value).ToArray();

答案 1 :(得分:3)

string[] result = Regex.Split("abc123def456", "([0-9]+)");

上面将使用任何数字序列作为分隔符,但将其包含在()中表示我们仍然希望将我们的分隔符保留在返回的数组中。

注意:在示例代码段中,我们将获取一个空元素作为数组的最后一个条目。

答案 2 :(得分:2)

您寻找的边界可以描述为&#34;数字跟随非数字的位置,或非数字跟随数字的位置。&#34;

所以:

string[] result = Regex.Split("abc123def456", @"(?<=\D)(?=\d)|(?<=\d)(?=\D)");

如果[0-9][^0-9]不够具体,请分别使用\d\D

答案 3 :(得分:1)

在数字周围添加空格,然后将其拆分。所以有解决方案。

Regex.Replace("abc123def456", @"(\d+)", @" \1 ").Split(' ');

我希望它有效。

答案 4 :(得分:-1)

您可以将字符串转换为char数组,然后遍历字符。只要字符属于同一类型(字母或数字),请继续将它们添加到字符串中。当下一个字符不再是相同类型(或者您已到达字符串的末尾)时,将临时字符串添加到数组并将临时字符串重置为null。