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

  • 本文关键字:数字段 字符串 拆分 c#
  • 更新时间 :
  • 英文 :


我有一个类似"ABCD232ERE44RR"的字符串。我怎样才能用字母/数字把它分成不同的部分。我需要:分段1:ABCD分段2:232第3节:ERE分段4:44

可以有任意数量的分段。我正在考虑去Regex,但不明白如何正确地写

您可以这样做;

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

我建议将其视为查找与目标模式的匹配项,而不是拆分为所需的部分。拆分赋予分隔符显著性,而匹配赋予标记显著性。

您可以使用Regex。匹配:

在指定的输入字符串中搜索指定正则表达式的所有出现项。

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);
}

尝试以下操作:

((A-Z)+(d)*)+

如果您决定不使用regex,您可以始终采用手动方式。

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);
}

最新更新