web-dev-qa-db-ja.com

文字列と数値を分割する正規表現

次の形式の文字列があります。

_codename123
_

Regex.Split() で使用して、アルファベット部分と数値部分を2要素の文字列配列に分割できる正規表現はありますか?

17
Robert Harvey

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;
45
Josh
splitArray = Regex.Split("codename123", @"(?<=\p{L})(?=\p{N})");

unicode文字とUnicode数字の間で分割されます。

8
Tim Pietzcker

文字列が常にその形式である場合、正規表現はこれに対して少し手間がかかります。あなたが使うことができます

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

そしてSubstringへの2つの呼び出し。

6
Bob

少し冗長ですが、

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

要件についてより具体的に教えてください。たぶん他のいくつかの入力例。

4
harpo

IMO、次のように一致するものを見つけるのははるかに簡単です。

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

Regex.Splitを使用するのではなく。

4
Ani

ええと、1行だけです:Regex.Split("codename123", "^([a-z]+)");

1
atejeda

もう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;
}
1
N Khan

このコードは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 "";
}
0
Mohit Singh