0

おはようございます!誰かがパターンマッチングで私を助けてくれることを願っています。

私がやりたいことは、一連のテキストに対して一連の数字を照合することです。唯一の問題は、探している数字の左側または右側にさらに数字があるものと一致させたくないということです (文字は問題ありません)。

動作するコードを次に示しますが、3 つのIsMatch呼び出しを行うのはやり過ぎのようです。IsMatch問題は、それを 1 回の呼び出しに減らす方法がわからないことです。

static void Main(string[] args)
{
    List<string> list = new List<string>();

    list.Add("cm1312nfi"); // WANT
    list.Add("cm1312");  // WANT
    list.Add("cm1312n"); // WANT
    list.Add("1312");    // WANT
    list.Add("13123456"); // DON'T WANT
    list.Add("56781312"); // DON'T WANT
    list.Add("56781312444"); // DON'T WANT

    list.Add(" cm1312nfi "); // WANT
    list.Add(" cm1312 ");    // WANT
    list.Add("cm1312n ");    // WANT
    list.Add(" 1312");       // WANT
    list.Add(" 13123456");   // DON'T WANT
    list.Add(" 56781312 ");  // DON'T WANT

    foreach (string s in list)
    {
        // Can we reduce this to just one IsMatch() call???
        if (s.Contains("1312") && !(Regex.IsMatch(s, @"\b[0-9]+1312[0-9]+\b") || Regex.IsMatch(s, @"\b[0-9]+1312\b") || Regex.IsMatch(s, @"\b1312[0-9]+\b")))
        {
            Console.WriteLine("'{0}' is a match for '1312'", s);
        }
        else
        {
            Console.WriteLine("'{0}' is NOT a match for '1312'", s);
        }
    }
}

あなたが提供できる助けを前もってありがとう!

〜さん。スポック

4

5 に答える 5

1

無効なパターンをキャッチするには、次を使用します。

Regex.IsMatch(s, @"\b[0-9]*1312[0-9]*\b")

また、[0-9] は次のように置き換えることができます\d

于 2013-09-19T15:33:09.333 に答える
0

前、後、またはまったく選択しない文字のみを選択できます

@"\b[a-z|A-Z]*1312[a-z|A-Z]*\b"
于 2013-09-19T15:48:03.770 に答える