2つの形式の多数を含むデータフィールドがあります。
553000.468...705.46.0000000 <- Format 1
553000.469.5501000.704.47.0000000 <- Format 2
703、704、または705を含む中央の3桁だけが必要です
次のような正規表現を使用して、これらの数字を引き出すことができました。
Regex num = new Regex(@"(?<number>7\d+) ?");
Match number = num.Match(numb);
if (number.Success)
Console.WriteLine(num.Match(numb).Result("${number}"));
ただし、これは、中央の数字の前に7がない場合にのみ機能します
それにアプローチする最良の方法は、「。」に焦点を当てることだと私には思えます。問題は、「。」の後に文字を一致させる方法がわからないことです。最初の「。」の前の数字を引くことができます。これを行うことによって:
Regex num = new Regex(@"(?<number>.\d+) ?");
Match number = num.Match(numb);
if (number.Success)
Console.WriteLine(num.Match(numb).Result("${number}"));
これは私に期間の前にすべてを与えるでしょう。ここにあるチートシートを使用していますが、「。」の後の文字を一致させる方法が示されていません。それを行う方法を理解できれば、必要な番号に到達するまでパターンを繰り返すことができます。その後、上記のコードを使用して、後で番号を取り除くことができます。これは最も効果的な方法ではないかもしれませんが、これまで正規表現を使用したことはなく、正直なところ、非常に紛らわしいと思います。
編集:
もっと多くの例を提供するか、もっとよく説明する必要があると言われました。Glsecという列を持つデータベーステーブルがあります。このフィールドには、2つの形式の数値が含まれます。553000.468 ... 705.46.0000000と553000.469.5501000.704.47.0000000は、2つの形式の例です。
553000.468 ... 705.46.0000000形式では、...(左から14番目の文字)の後の最初の数字のグループにある703、704、または705の数字のみが必要です。
553000.469.5501000.704.47.0000000形式では、左から4番目の数字のグループ(20番目の文字)で見つかった703、704、または705の数字のみが必要です。
その3つのグループの番号には、000から999までの任意の番号を含めることができますが、必要なのは3つの番号だけです。703、704、705が他の番号のグループにランダムにポップアップする可能性もあるため、正しい位置から番号を取得していることを確認する必要があります。
それがそれをよりよく説明することを願っています。