• ベストアンサー

正規表現でつまずいています

お世話になっております。 VB2005を使っていますが、正規表現でつまずいています。 日付を表すデータとして、以下のような2つのパターンがあります。 Date: 02-apr-2010   ← : と 02の間に半角スペースがあります。 Date:13-Jan-2010 00:12:14 それぞれから年月日のデータのみを取り出すために正規表現を組んでみましたがうまくいきません。 "Date:\s*(?<date>.*)$|\s.*" $|\s.*  で意図したところは、文字列の最後 or スペースが1個と任意の文字が続く、というものです。 正しい表記方法をご指示いただければ幸いです。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

#1です。 半角スペースを判定するとしたら、 こちらの方がいいのかな? 一応テストしてみたものです。  Dim r As New Regex("Date:\s*(?<date>\d{2}-[a-z,A-Z]{3}-\d{4})", RegexOptions.Compiled)  MsgBox(r.Match("Date:13-Jan-2010 00:12:14").Result("${date}")) ご参考になれば。

myart
質問者

お礼

ありがとうございます。 おかげさまでアドバイスいただいた、どちらの方法でもうまくいきました。

その他の回答 (2)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

>(?<date>) これが何だか分かりませんが、以下のようになるのでは? Date\s{0,1}(?<date>)$|(?<date>)\s{1}\S+.*$ >スペースが1個と任意の文字が続く 「日付で終わる」or「日付+空白1+空白以外が1個以上+任意の文字列で終わる」 こういう意味ではないでしょうか。 そこで、前述のような表現になります。

myart
質問者

お礼

アドバイスありがとうございます。 >スペースが1個と任意の文字が続く 「日付で終わる」or「日付+空白1+空白以外が1個以上+任意の文字列で終わる」 意図したのはまさにこういうことです。 しかし、ご呈示いただいた書式では、うまく動作しませんでした。 or のくくり方がポイントのように思われますので、私もこのあたりをもう少し試したみたいと思います。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

1つの案としてです。 "Date:.*(?<date>\d{2}-[a-z,A-Z]{3}-\d{4})"

myart
質問者

お礼

ありがとうございます。 アドバイスいただいた方法でうまくいきました。

関連するQ&A