正規表現

30分プログラム、その46。Python正規表現を使ってみよう。

今回、作ったのは正規表現でパスのディレクトリ部分、ファイル名の部分、拡張子の部分を取り出すプログラム。

$ python regexp.py ~/foo.txt
direname: /Users/mzp
basename: foo.txt
ext: txt
import sys
import re
def basename(path):
    regexp = re.compile(r'^.*/')
    return regexp.sub('',path)
 
def dirname(path):
    regexp = re.compile(r'(.*)/.*?$')
    o=regexp.match(path)
    if o != None:
	return o.group(1)
 
def ext(path):
    regexp = re.compile(r'.*\.(?P<ext>.*?)$')
    o=regexp.match(path)
    if o != None:
	return o.groupdict()['ext']
 
path = sys.argv[1]
print "direname: %s" % dirname(path)
print "basename: %s" % basename(path)
print "ext: %s" % ext(path)
  • 上から順に、文字列の置き代え、グループのキャプチャ、名前付きグループでやっているのは勉強のため
  • やっぱり正規表現は組み込みの記法を用意するべきだと思う