Извлечение месяца и года из строки с помощью Python Regex - PullRequest
1 голос
/ 20 марта 2019

У меня есть строка, из которой я хочу извлечь имя месяца и год с помощью регулярного выражения Python.Строка выглядит следующим образом:

x='januray valo na Feb 2017 valo Jan-2015 anj 1900 puch Janu Feb Jan Mar 15 MMMay-85 anF 15'

Я должен возвращать следующий код:

['Feb 2017', 'Jan-2015', 'Mar 15', 'May-85']

Я пробовал -

re.findall('[Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec]{3}[\s-]\d{2,4}', x)

Но я выбираю кодup anF 15 , т. е. я получаю следующий вывод:

['Feb 2017', 'Jan-2015', 'Mar 15', 'May-85', 'anF 15']

Как я могу помешать коду вводить такие комбинации, как J an | Fe б

Ответы [ 3 ]

3 голосов
/ 20 марта 2019

Используйте чередование сокращенных названий месяцев. То есть используйте следующий шаблон регулярных выражений:

(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[\s-]\d{2,4}

Это говорит о том, что вы намереваетесь, а именно, чтобы соответствовать одному из 12 сокращенных названий месяцев, затем пробел / тире, затем 2 или 4 цифры.

x = 'januray valo na Feb 2017 valo Jan-2015 anj 1900 puch Janu Feb Jan Mar 15 MMMay-85 anF 15'

results = re.findall('(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[\s-]\d{2,4}', x)
print(results)

['Feb 2017', 'Jan-2015', 'Mar 15', 'May-85']

Проблема с вашим текущим шаблоном в том, что он использует класс символов :

[Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec]{3}[\s-]\d{2,4}

Это фактически означает совпадение трех букв из букв, содержащихся в названиях месяцев (плюс труба). Другими словами, вы говорите так:

[abceglnoprtuvyADFJMNOS|]{3}[\s-]\d{2,4}
1 голос
/ 20 марта 2019

Вы используете класс символов здесь [Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec]{3}, что означает любой символ из коллекции символов с повторением 3 ({3}).Чтобы исправить это, используйте группу без захвата .

re.findall('(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[\s-]\d{2,4}', x)
0 голосов
/ 20 марта 2019

/ [A-Z] {3}.? \ Д {4} / * ги 1001 *

это будет работать отметьте здесь

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