3

次のサンプルデータがあります。

21/10/2012 blahblah blah blahblah 265 blah 25 22/10/2012 blahblah blah blahblah 10 blah 14 blah 66 NK blahblah blah blahblah 25

出力を次のデータにしたい:

21/10/2012 blahblah blah blahblah 265 blah 25
22/10/2012 blahblah blah blahblah 10 blah 14 blah 66 NK blahblah blah blahblah 25

私は次のことを試しました:

var regex = new Regex ("(\d{1,2})/(\d{1,2})/(\d{4})");
var matches = regex.Matches(str);//str is given above
foreach(var item in matches)
{
  //my logic to do operations
}

これにより、日付の配列が得られます。日付で文字列を分割するにはどうすればよいですか?

4

1 に答える 1

3

日付の前に空の文字列で文字列を分割できます。そのためには、次の正規表現が必要です。

string[] arr = Regex.split(str, "(?<!\d)(?=\d{1,2}/\d{1,2}/\d{4})");

上記の正規表現を分割すると、必要な出力が得られます。21/10/2012フォームの日付が前にあり、前に a がない空の文字列で文字列を分割しますdigitlook-behind一日の部分がバラバラにならないように、私たちは何かをする必要があります。1それがないと、 inの前に空の文字列で分割され、別の要素として21保持2されます。1/10/2012

empty stringまた、文字列の最初の空の文字列が分割基準を満たすため、配列の最初の要素としてan が取得されることに注意してください。


正規表現を使用すると、日付の検証が複雑になる可能性があります。特に、可能性のあるすべての無効な日付を制限したい場合、30 Feb. それでも、必要に応じてこの正規表現を試すことができますが、それは30 & 31 Feb、さらには31 Novemberにも一致します。

string[] arr = Regex.split(str, "(?<!\\d)(?=(?:0[1-9]|[1-2][0-9]|[3][01])/(?:0[1-9]|1[0-2])/(?:19[0-9]{2}|2[0-9]{3}))");
于 2013-02-12T16:45:32.200 に答える