4

私の脳は混乱しているに違いありませんが、これを機能させることができず、正規表現の経験がほとんどありません。

「gfdsgfd354gfdgfd55gfdgfdgfs9gfdgsf」のような文字列があります。

文字列の最後の桁 (この場合は "9") を見つけるには、正規表現が必要です。

編集

私はもっ​​とはっきりしているはずですが、私が言うように、私は動揺しています。

最後の桁の前にハイフン文字を挿入することです。C# Regex.Replace を使用しています。Dave Sexton によって既に提案されたアイデアを使用して、次のことを試みましたが成功しませんでした。

    private string InsertFinalDigitHyphen(string data)
    {
        return Regex.Replace(data, @"(\d)[^\d]*$", " $1");
    }

これで、「ABCDE-1FGH」を取得するつもりで「ABCDE1FGH」を処理できますが、実際には「ABCDE-1」を取得します。

4

4 に答える 4

5

正規表現は読みにくいといつも思うので、次の LINQ ステートメントを使用して別の方法でそれを行うことができます。

string str = "gfdsgfd354gfdgfd55gfdgfdgfs9gfdgsf";
var lastDigit = str.Last(char.IsDigit);

出力:

9

この前にハイフンを挿入するには、LastIndexOf代わりにLastそのインデックスを使用して、文字列内の正しい位置にハイフンを挿入します。

于 2013-06-11T13:56:24.030 に答える
4

これを使用できます:

(\d)[^\d]*$

編集 :

あなたは最初に一致のみを言及し、言語はなく、代替もありませんでした. C# の置き換えには、使用する必要があります

private string InsertFinalDigitHyphen(string data) {
    return Regex.Replace(data, @"(\d)(\D*)$", " $1$2");
}
于 2013-06-11T13:48:00.727 に答える
1

最後の 1 桁の場合は、次のように使用します。

(\d)[^\d]*$

それが数字の最後のセットである場合は、これを使用します。

(\d+)[^\d]*$

編集:

キャプチャ グループ (括弧内のビット) を選択する必要があります。C# の場合、次のようになると思います。

Regex.Matches("gfdsgfd354gfdgfd55gfdgfdgfs9gfdgsf", '(\d)[^\d]+$')[0].Groups[1].Captures[0].Value

または、代わりにキャプチャ グループを回避するために、次のように正規表現の背後にあるものを使用できます。

\d(?=[^\d]+$)
于 2013-06-11T13:52:31.817 に答える
0

String.LastIndexOfAnyでこれを行うこともできます。

private string InsertFinalDigitHyphen(string data)
{
    int lastDigit = data.LastIndexOfAny(new char[] {'0','1','2','3','4','5','6','7','8','9']);
    return (lastDigit == -1) ? data : data.Insert(lastDigit, "-");
}
于 2013-06-11T14:46:29.263 に答える