将字符串分割为多个字母和数字片段

3
我有一个字符串“ABCD232ERE44RR”。我该如何按字母/数字将其分成单独的片段?我需要: 片段1:ABCD 片段2:232 片段3:ERE 片段4:44
可以有任意数量的片段。我考虑使用正则表达式,但不知道如何正确编写它。
4个回答

3

你可以像这样做:

using System;
using System.Collections.Generic;   
using System.Text.RegularExpressions;
public class Program
{
    public static void Main()
    {
        var substrings = Regex.Split("ABCD232ERE44RR", @"[^A-Z0-9]+|(?<=[A-Z])(?=[0-9])|(?<=[0-9])(?=[A-Z])");
        Console.WriteLine(string.Join(",",substrings));
    }
}

Output : ABCD,232,ERE,44,RR

2
我建议将其视为查找与目标模式匹配的内容,而不是拆分您想要的部分。拆分会赋予定界符重要性,而匹配会赋予标记重要性。
您可以使用Regex.Matches:
搜索指定输入字符串中指定正则表达式的所有出现。
var matches = Regex.Matches("ABCD232ERE44RR", "[A-Z]+|[0-9]+");

foreach (Match match in matches) {
     Console.WriteLine("Found '{0}' at position {1}", match.Value, match.Index);
}

1
尝试像这样做一些事情:
((A-Z)+(\d)*)+

0

如果你决定不使用正则表达式,你总是可以手动处理。

const string str = "ABCD232ERE44RR1SGGSG3333GSDGSDG";

var result = new List<StringBuilder> 
{
    new StringBuilder()
};

char last = str[0];

result.Last().Append(last);

bool isLastNum = Char.IsNumber(last);

for (int i = 1; i < str.Length; i++)
{
    char ch = str[i];

    if (!((Char.IsDigit(ch) && isLastNum) || (Char.IsLetter(ch) && !isLastNum)))
    {
        result.Add(new StringBuilder());
    }

    result.Last().Append(ch);
    last = ch;
    isLastNum = Char.IsDigit(ch);
}

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