Composable Regexp в Python - PullRequest
       0

Composable Regexp в Python

10 голосов
/ 21 июля 2009

Часто я хотел бы создать сложные регулярные выражения из более простых. Единственный способ, которым я в настоящее время знаю об этом, - через строковые операции, например ::10000

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 для составления регулярных выражений? Я бы предпочел компилировать каждое регулярное выражение по отдельности (например, для использования отдельных опций компиляции), но тогда, похоже, больше нет способа их составления!

Ответы [ 2 ]

4 голосов
/ 21 июля 2009

Вы можете использовать синтаксис форматирования 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)

(Обратите внимание на добавленную группировку вокруг января | февраля | марта.)

1 голос
/ 21 июля 2009

Вы можете использовать Ping's 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...