2017-12-07 10 views
0

私は、うまくいけば簡単かつ迅速な助けが必要です。私はバーコードから一連のデータを取得しています。アカウント番号、日付、および請求書番号の3つの異なる値を取得するためにスプライスする必要があります。Regex Generation Assistance

正規表現は.Net Frameworkのために書かれていなければなりません。

バーコードは、このようなルックスを返しますものの例 -

000295934009000306511302017001 

最初の9桁は口座番号です。私はこれを使って考え出したものを持っています - ^\d{9}

次の10桁は請求番号です。私は正規表現が私にそれを与えるだろうか分からない。

次に、請求書番号に続く8桁の数字が日付(この例では11302017)です。私はそれを引き出してMM/DD/YYYY形式にする必要があります。

名前付きグループパターンも作成します。

(?<account>^\d{9})(?<date>XXXXXXX)(?<invoice>XXXXXXX) - the X's are what I need to figure out. 

ご協力いただきありがとうございます。

+1

あなたは試してみました、あなたはどのような問題に直面していますか? – suvartheec

+0

最後に001で何をしますか? – Sweeper

+0

末尾の001の場合、長さにかかわらずすべてを無視する(\ d {3})。 –

答えて

0

これは正規表現である:

(\d{9})(\d{10})(\d{8}) 

自明:グループ1から9の数字、グループ2 10桁及びグループ3 8桁。 ParseExactを使用し、DateTimeオブジェクトを取得するには

string pattern = @"(\d{9})(\d{10})(\d{8})"; 
string input = @"000295934009000306511302017001"; 
var match = Regex.Match(input, pattern); 
var accountNumber = match.Groups[1].Value; 
var invoiceNumber = match.Groups[2].Value; 
var date = match.Groups[3].Value; 

DateTime.ParseExact(date, "MMddyyyy", CultureInfo.InvariantCulture) 

System.Text.RegularExpressionsSystem.Globalizationのためのディレクティブを使用して追加することを忘れないでください

あなたはこのようにそれを使用することができます!

0

これは正規表現です:

(\d{9})(\d{10})([0-1][0-2][0-3][0-9]\d{4}) 

ACCOUNTNUMBER - グループ1

invoiceNumber - グループ2

日 - Groups3