答案 0 :(得分:45)
我知道您要求使用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;
答案 1 :(得分:8)
splitArray = Regex.Split("codename123", @"(?<=\p{L})(?=\p{N})");
将在Unicode字母和Unicode数字之间分开。
答案 2 :(得分:6)
如果你的字符串总是那种形式,那么正则表达式对此有点沉重。你可以用
"codename123".IndexOfAny(new char[] {'1','2','3','4','5','6','7','8','9','0'})
和两次调用Substring。
答案 3 :(得分:4)
有点冗长,但
Regex.Split( "codename123", @"(?<=[a-zA-Z])(?=\d)" );
您能更具体地了解您的要求吗?也许还有一些其他的输入例子。
答案 4 :(得分:4)
IMO,找到匹配项会容易得多,例如:
Regex.Matches("codename123", @"[a-zA-Z]+|\d+")
.Cast<Match>()
.Select(m => m.Value)
.ToArray();
而不是使用Regex.Split
。
答案 5 :(得分:1)
另一种更简单的方法是
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;
}
答案 6 :(得分:1)
嗯,仅限一行:Regex.Split("codename123", "^([a-z]+)");
答案 7 :(得分:0)
此代码用java / logic编写,在其他地方应该相同
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 "";
}