おはようございます!誰かがパターンマッチングで私を助けてくれることを願っています。
私がやりたいことは、一連のテキストに対して一連の数字を照合することです。唯一の問題は、探している数字の左側または右側にさらに数字があるものと一致させたくないということです (文字は問題ありません)。
動作するコードを次に示しますが、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);
}
}
}
あなたが提供できる助けを前もってありがとう!
〜さん。スポック