home changes contents help options

**036:文字列が空行か調べる**

正規表現を使いますので、知らない方は次の文書を先に読んでおいてください。 http://www.python.jp/Zope/articles/tips/regex_howto

最も狭い意味での「空行」は、「改行」だけの行でしょう。 つまり、頭の文字が「行頭」であり、かつ「行末」であるということです。 従って探すパターンは、「^$」になります。 マッチしないとNoneが返ってきますので、条件文で処理してください。 ちなみにここでパターンの文字を「r'^$'」としてありますが、これは生の文字列(raw string)であることを示しています。 正規表現では\を重ねて使うことが多くなるので、混乱を避けるため生の文字列を使ってエスケープとしての\をなくすようにしたほうがよいらしいです。

 >>> import re
 >>> r1=re.compile(r'^$')
 >>> r1.match('\n')
 <_sre.SRE_Match object at 0x00C13138>
 >>> r1.match('aaa\n')
 >>> print r1.match('\n')
 <_sre.SRE_Match object at 0x00C13170>
 >>> print r1.match('aaa\n')
 None
 >>> print r1.match('aaa\n\nbbb')
 None

しかし、人間の目から見ると見えない文字が入っている行は空行に見えるでしょう。 そのパターンは、「\A\s*\Z」です。 ^と\Aの違い、$と\Zの違いはコンパイルのオプションの違いなどで変わってくるので自分で調べてください。

 >>> import re
 >>> r1=re.compile(r'\A\s*\Z')
 >>> r1.match('\n')
 <_sre.SRE_Match object at 0x00C131A8>
 >>> print r1.match('aaa\n')
 None
 >>> print r1.match('\t\n')
 <_sre.SRE_Match object at 0x00C13138>
 >>> print r1.match('aaa\n\n\bbb')
 None