2009-07-20 38 views
8

通常,我想從簡單的正則表達式構建複雜的正則表達式。目前我所知道的這樣做的唯一途徑是通過字符串操作,例如:Python中的可組合正則表達式

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更系統的方法(可能是模塊)有組合的正則表達式的?我寧願單獨編譯每個正則表達式(例如,使用單獨的編譯選項),但是似乎沒有辦法再編寫它們了!?

+0

你這樣做的方式似乎清晰簡潔。哦,順便說一句,你不需要字符串中的「r」作爲Date變量。 – 2009-07-20 21:30:30

+0

Python是否允許在正則表達式中進行評論? – 2009-07-20 21:35:43

+1

mmyers,是的。當你使用標誌re.VERBOSE時,你可以使用#作爲評論。 – 2009-07-20 21:40:40

回答

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() 
4

您可以使用Python的格式化語法是:

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月| 3月)