вернуть строку даты с помощью регулярного выражения - PullRequest
1 голос
/ 11 октября 2019

Я пытаюсь вернуть дату из более длинной строки. Датой может быть любой день недели, любое число с индексом st, nd, rd, th и месяц как 3 строковых значения (Jan, Feb etc).

Это моя попытка, но я получаю None. Не уверен, что мне не хватает?

string = 'Times for Saturday 10th Aug'

days = ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')
months = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')
pat = re.compile(r'^(%s) (\d+)(st|nd|rd|th) (%s)$' %
                 ('|'.join(days), '|'.join(months)))

print(re.match(pat, string))

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Вы должны удалить начало строки символа ^ и конец строки символа $, тогда все работает просто отлично:

>>> re.findall(r'(%s) (\d+)(st|nd|rd|th) (%s)' %
...                  ('|'.join(days), '|'.join(months)), string)
[('Saturday', '10', 'th', 'Aug')]

И, пожалуйста, не вызывайте переменную string - он уже используется в python.

1 голос
/ 11 октября 2019

Символ каретки ^ в регулярном выражении и re.match оба начинают сопоставлять в начале строки. Просто снимите каретку и используйте re.search.

pat = re.compile(r'(%s) (\d+)(st|nd|rd|th) (%s)$' %
                 ('|'.join(days), '|'.join(months)))

print(re.search(pat, string))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...