Python中的可组合正则表达式

时间:2009-07-20 21:24:58

标签: python regex

通常,我想从简单的regexp构建复杂的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中的不同方法或更系统的方法(可能是模块)具有可组合的regexp?我宁愿单独编译每个正则表达式(例如,使用单独的编译选项),但是似乎没有办法再编写它们了??

2 个答案:

答案 0 :(得分: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)

(注意在Jan | Feb | Mar附近添加的分组。)

答案 1 :(得分: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()