042:正規表現にマッチした部分を取り出す
reモジュールのsearch()関数を使います。 正規表現の奥は深いので、記述方法については、 正規表現HowTo とか、 ライブラリリファレンス を見てほしい。
例えば、aで始まる3文字を取り出す場合はこんな感じになる。結果はMatchObject インスタンスというので返ってくるらしいが、何のことだかわからない。とにかくこうすれば取り出せることだけは確か。マッチしないときはNoneになるようだ。
最初にマッチした部分を取り出す。(aで始める3文字)
>>> import re
>>> m=re.search('a..','xxxabcfffpad')
>>> m.group(0)
'abc'
>>> m=re.search('a..','xxx')
>>> m
>>> print m
None
前がxで、aで始まる3文字を取り出す。
>>> m=re.search('x(a..)','xxxabcfffpadabc')
>>> m.group(1)
'abc'
>>> m.group(0)
'xabc'
マッチした部分を全て取り出すには、findall()を使います。結果はリストで返ってきます。
>>> m=re.findall('a..','xxxabcfffpadabc')
>>> m
['abc', 'ada']
指定されたフォルダーの中にあるファイルのリストを取り、特定の形式のものだけをプリントします
# -*= coding: cp932 -*-
import sys, re, string, os
dir='C:\Documents and Settings\seko\My Documents'
filelist=os.listdir (os.path.normpath(dir))
for i in filelist:
try:
m=re.search('^log-(\d{3})-(\d)-([ABCD])_(\d)\S*',i)
file=m.group(0)
print m.group(0),m.group(1),m.group(2),m.group(3),m.group(4)
except AttributeError:
continue
>>> log-123-4-B_3xx.txt 123 4 B 3 log-777-4-C_2xxxx.txt 777 4 C 2