我知道你要求使用Split
方法,但作为替代方案,你可以使用命名捕获组:
var numAlpha = new Regex("(?<Alpha>[a-zA-Z]*)(?<Numeric>[0-9]*)");
var match = numAlpha.Match("codename123");
var alpha = match.Groups["Alpha"].Value;
var num = match.Groups["Numeric"].Value;
splitArray = Regex.Split("codename123", @"(?<=\p{L})(?=\p{N})");
会在 Unicode 字母和 Unicode 数字之间进行拆分。
如果您的字符串始终具有该形式,那么使用正则表达式可能有些繁琐。您可以使用
"codename123".IndexOfAny(new char[] {'1','2','3','4','5','6','7','8','9','0'})
并且有两个Substring的调用。
Regex.Split( "codename123", @"(?<=[a-zA-Z])(?=\d)" );
codename
,1
,2
和 3
。 - Tim Pietzcker我认为,如果能够找到类似以下的匹配,会更加容易:
Regex.Matches("codename123", @"[a-zA-Z]+|\d+")
.Cast<Match>()
.Select(m => m.Value)
.ToArray();
建议使用Regex.Split
代替其他方法。
好的,这只有一行代码:Regex.Split("codename123", "^([a-z]+)");
这段代码是用Java编写的,逻辑在其他地方应该是相同的。
public String splitStringAndNumber(String string) {
String pattern = "(?<Alpha>[a-zA-Z]*)(?<Numeric>[0-9]*)";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(string);
if (m.find()) {
return (m.group(1) + " " + m.group(2));
}
return "";
}
string originalstring = "codename123";
string alphabets = string.empty;
string numbers = string.empty;
foreach (char item in mainstring)
{
if (Char.IsLetter(item))
alphabets += item;
if (Char.IsNumber(item))
numbers += item;
}
(?<Alpha>[a-zA-Z]+)(?<Numeric>[0-9]+)
。 - ChrisAlpha
在Numeric
之前。 - Josh