17/05/03

python正規表現入門「日付を取得する」


今回は、python3の正規表現で日付を取得します。
形式として、2017-05-03、20170503、17/05/03、
これらになります。

 

こちらのサイトで実行できます。
右にある旗マークを押して、globalとmulti lineを有効にしてください。
Online regex tester and debugger: PHP, PCRE, Python, Golang and JavaScript


2017-05-03を取得する

まず、xxxx-xx-xx
といった形を正規表現で表していきます。

^.{4}-.{2}-.{2}$

解説すると、
^(キャレット)は文字列の先頭を表します。
.(ドット)は改行以外の任意の文字にマッチします。
{x}は直前の正規表現をx回繰り返します。
$は最後尾を表します。

 

しかし.(ドット)を使うと任意の文字になってしまうので、
0000-00-00といったように
任意の数字を指定することで、範囲を狭めます。

^[0-9]{4}-[0-9]{2}-[0-9]{2}$
# もしくは
^\d{4}-\d{2}-\d{2}$

解説すると、
[]は文字の集合を指定するのに使用します。
例えば[xyz]ならば”x”,”y”,”z”のどれか1文字にマッチします。
ここでは[0-9]といったように先頭と最後の2文字の間に-(ハイフン)を挟むと、
連続した文字の-(ハイフン)を指定できます。

20170503といった形式も取得する

先ほどとの形式(xxxx-xx-xx)の違いは-(ハイフン)がないことです。
つまり、先ほどの正規表現のハイフン部分を0もしくは1つある
といった様に変更します。

^\d{4}-?\d{2}-?\d{2}$
#もしくは
^\d{4}-{,1}\d{2}-{,1}\d{2}$

解説すると、
?は 直前の正規表現を0または1回繰り返したものにマッチします。
{0,1}と同じになります。また{,1}のように左側を省略すると0が指定されます。

17/05/03といった形式も取得する

これはxxxx-xx-xxの形式のxxxxがxxに変わり、
ハイフン部分が/(スラッシュ)に変わっています。
つまり、今までの正規表現含めて考えると、

 

先頭の数字を2以上4回以下繰り返す。
-(ハイフン)または/(スラッシュ)が0または1つ。
これらを追加すれば良さそうです。

^\d{2,4}[/-]?\d{2}[/-]?\d{2}$
もしくは
^\d{2,4}[^.]?\d{2}[^.]?\d{2}$

解説すると、
[]の中で-(ハイフン)を使うと連続した文字の範囲を指定されてしまいます。
なので、先頭か最後尾に-(ハイフン)を置くか、エスケープしてください。
[]の中で^(キャレット)を先頭に置くと否定を示します。
ここでは.(ドット)の否定つまり、任意の文字以外(記号)を示します。

 

以上です。

 

参考記事
6.2. re — 正規表現操作 — Python 3.6.1 ドキュメント

スポンサーリンク

メールアドレスが公開されることはありません。

youya66

だらけとびびり、それとちょっぴりのてきとーさ。

コアラになってだらだらしながら愛されたい。