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への2つの呼び出し。
少し冗長ですが、
Regex.Split( "codename123", @"(?<=[a-zA-Z])(?=\d)" );
要件についてより具体的に教えてください。たぶん他のいくつかの入力例。
IMO、次のように一致するものを見つけるのははるかに簡単です。
Regex.Matches("codename123", @"[a-zA-Z]+|\d+")
.Cast<Match>()
.Select(m => m.Value)
.ToArray();
Regex.Split
を使用するのではなく。
ええと、1行だけです:Regex.Split("codename123", "^([a-z]+)");
もう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;
}
このコードは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 "";
}