正则表达式分割字符串和数字
我有一个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 ""; }