2

空白またはアンダースコアが含まれている可能性のある AlphaNumeric 値があります。そこから数値を分割し、値を1つ増やし、数値部分をアルファ部分に結合する必要があります。

たとえば、英数字は次のようになります: 1- BA 123 または 2. BA_123

私は Regex を使用しました。文字列に空白が含まれていないか、スコアの下にある場合に機能します。以下は、分割して 1 ずつインクリメントするために使用されるコードです。

string StrInputNumber="BA123" 
var numAlpha = new Regex("(?<Alpha>[a-zA-Z]*)(?<Numeric>[0-9]*)"); 
var match = numAlpha.Match(StrInputNumber); 
var alpha = match.Groups["Alpha"].Value; 
int num = int.Parse(match.Groups["Numeric"].Value);

これは、特殊文字を含まない英字と数字に対してのみ機能します

この問題を解決するためのガイドをお願いします

4

2 に答える 2

3

それらの文字を期待する位置に追加するだけです。

string[] StrInputNumber = { "BA123", "BA_123", "BA 123", "Foo 1"};
foreach (String item in StrInputNumber) {

    Console.Write(item + "\t==>\t");
    var numAlpha = new Regex("(?<Alpha>[a-zA-Z]*[ _]?)(?<Numeric>[0-9]*)");
    var match = numAlpha.Match(item);
    var alpha = match.Groups["Alpha"].Value;
    int num = int.Parse(match.Groups["Numeric"].Value) + 1;

    Console.WriteLine(alpha + num);
}

これにより、(オプションで)_文字の後に 1 つまたは 1 つのスペースが許可されます。

より柔軟にしたい場合は、文字があるクラスに文字を追加するだけです。

var numAlpha = new Regex("(?<Alpha>[a-zA-Z _]*)(?<Numeric>[0-9]*)");

これにより、文字列内の数字の前の任意の量のスペースとアンダースコアが許可されます (たとえば、" Foo _ bar ___ 123" が一致します)。

ユニコード

ASCII 文字だけでなく、すべての文字に一致させたい場合は、Unicode コード プロパティを試してください。

\p{L}任意の言語の任意の文字になります

\d数字の短縮文字クラスです

var numAlpha = new Regex("(?<Alpha>[\p{L} _]*)(?<Numeric>\d*)");

参考文献

あなたが見ることができるいくつかの正規表現の基本について

于 2012-05-21T11:51:29.100 に答える
0

それがあなたの質問かどうかはわかりませんが、空白またはアンダースコアが 1 つある場合:

var numAlpha = new Regex("(?<Alpha>[a-zA-Z]*)[ _]{1}(?<Numeric>[0-9]*)");

たくさんある場合:

var numAlpha = new Regex("(?<Alpha>[a-zA-Z]*)[ _]*(?<Numeric>[0-9]*)");
于 2012-05-21T11:30:46.553 に答える