2009-07-20 6 views
8

しばしば、より単純なものから複雑な正規表現を構築したいと思います。私は現在、これを行うのを知ってる唯一の方法は、文字列操作を介して行われ、例えば:Pythonで合成可能なRegexp

Year = r'[12]\d{3}' 
Month = r'Jan|Feb|Mar' 
Day = r'\d{2}' 
HourMins = r'\d{2}:\d{2}' 

Date = r'%s %s, %s, %s' % (Month, Day, Year, HourMins) 
DateR = re.compile(Date) 

は、構成可能な正規表現を持っているPythonで異なる方法や、より体系的なアプローチ(多分モジュール)を認識して誰ですか?むしろ個々の正規表現を個々にコンパイルしたいのですが(例えば個々のコンパイルオプションを使用する場合)、それらをもう合成する方法がないようですね!

あなたはこのためにPythonの書式設定の構文を使用することができます
+0

あなたのやり方ははっきりと簡潔です。ああ、ところで、 'Date'変数の文字列に" r "は必要ありません。 –

+0

Pythonは正規表現でコメントを許可しますか? –

+1

mmyers、はい。 re.VERBOSEフラグを使用すると、コメントに#を使用できます。 –

答えて

1

あなたは、Pingののrxbを使用することができます。

year = member("1", "2") + digit*3 
month = either("Jan", "Feb", "Mar") 
day = digit*2 
hour_mins = digit*2 + ":" + digit*2 

date = month + " " + day + ", " + year + ", " + hour_mins 

結果の日付を直接照合するか、

DateR = date.compile() 
+0

これは私が探していた答えのようです。モジュールがどのようにコンパイルオプションとマッチグループについて調べるかをチェックする必要がありますが、最初の視点からはperferctのように見えます:-)。 – ThomasH

4

types = { 
    "year":   r'[12]\d{3}', 
    "month":  r'(Jan|Feb|Mar)', 
    "day":   r'\d{2}', 
    "hourmins": r'\d{2}:\d{2}', 
} 
import re 
Date = r'%(month)s %(day)s, %(year)s, %(hourmins)s' % types 
DateR = re.compile(Date) 

(。追加月の周りにグループ化します| 2月を|月)

+0

それでも文字列操作に依存しています。 – ThomasH

+1

Yep !? (/ *ダムのコメントシステム* /を埋め込むための埋め込み) –