正则表达式分割字符串和数字

我有一个forms的字符串:

codename123 

是否有一个正则表达式可以与Regex.Split()一起使用,将字母部分和数字部分分成两个元素的字符串数组?

我知道您要求使用Split方法,但作为替代方法,您可以使用命名捕获组:

 var numAlpha = new Regex("(?[a-zA-Z]*)(?[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数字之间分割。

如果你的字符串始终是那种forms,那么正则表达式对此有点沉重。 你可以用

 "codename123".IndexOfAny(new char[] {'1','2','3','4','5','6','7','8','9','0'}) 

以及对Substring的两次调用。

有点冗长,但是

 Regex.Split( "codename123", @"(?<=[a-zA-Z])(?=\d)" ); 

你能更具体地了解你的要求吗? 也许还有一些其他的输入例子。

IMO,找到比赛会更容易,比如:

 Regex.Matches("codename123", @"[a-zA-Z]+|\d+") .Cast() .Select(m => m.Value) .ToArray(); 

而不是使用Regex.Split

另一种更简单的方法是

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

好吧,只是一行: Regex.Split("codename123", "^([az]+)");

这段代码是用java / logic编写的,应该在别处相同

 public String splitStringAndNumber(String string) { String pattern = "(?[a-zA-Z]*)(?[0-9]*)"; Pattern p = Pattern.compile(pattern); Matcher m = p.matcher(string); if (m.find()) { return (m.group(1) + " " + m.group(2)); } return ""; }