2017-02-17 2 views
0

Я сопоставляю несколько форматов дат с этим regex.Как улучшить следующее регулярное выражение даты python?

(?i)\b\d{1,2}[-|–|—|\s|(?:\sde\s|\sdel\s)|\d+/](?:Ene|Enero|Feb|Febrero|Mar|Marzo|Abril|Mayo|May|Jun|Junio|Jul|Julio|Ago|Agosto|Sep|Sept|Septiembre|Oct|Octubre|Nov|Noviembre|Dic|Diciembre|\d+)[-|–|—|\s|(?:\sde\s|\sdel\s)|\d+/](?:\d{4}|\d{2})\b

Однако, я не понять, как можно добавить к предыдущей поддержке регулярных выражений для согласования форматов, как это:

11 de Noviembre de 2013 

23 de noviembre del 2011 

11 de Noviembre del 2013 

Как вы можете видеть в приведенном выше регулярном выражении, я пытался использовать \w(\sde\s|\sdel\s) и (?:\sde\s|\sdel\s). Тем не менее он не работает. Как я могу сопоставить предыдущие даты ?.

+0

Почему downvote? .... Я представил пример и альтернативные подходы к решению этой проблемы? ... проверьте тег регулярного выражения ... –

+0

https://regex101.com/r/uvdYVz/5 Исправлено. Вы использовали наборы вместо групп захвата для соответствия de/del – TemporalWolf

+0

Это очень похоже на то, что я пробовал ... Почему моя попытка не сработала? @TemporalWolf –

ответ

5
[-|–|—|\s|(?:\sde\s|\sdel\s)|\d+/] 

[-|–|—|\s|(?:\sde\s|\sdel\s)|\d+/] 

просит character classes [] когда то, что вы хотите groups () (или не-захватывая группы в данном случае) (?:):

(?:-|–|—|\s|(?:\sde\s|\sdel\s)|\d+/) 

(?:-|–|—|\s|(?:\sde\s|\sdel\s)|\d+/) 

см regex101

Кроме того, если вы ищете для чего:

What's the difference between() and [] in regular expression patterns?

+2

Спасибо ... Я думал, что '()' и '[]' были одинаковыми –

+2

@ J.Do Nope. Вы должны прочитать объяснение в regex101. –

+0

Хорошо, теперь я понял, спасибо –

0

Поскольку это вопрос Python, почему вы не удалите де «S и дель» s, как и когда они происходят с помощью

date = date.replace('de','').replace('del','') 

А потом работать на нем, как вы мы?

+0

Тогда это недопустимые даты с точки зрения langauge –

+0

Конечно, я просто могу сделать замену пустым пространством .... но я изучаю регулярное выражение ... Я хотел бы знать, как захватить определенные строки .. –

+1

_'Тогда это недействительные даты в терминах langauge'_ - согласитесь, но, безусловно, специфические для языка конструкции можно игнорировать во внутренних приложениях. Вы не отправляете пользователя, лишенную _de_ и _del_. Тем не менее, совершенно понятно, что для решения на основе регулярных выражений это вполне понятно. Я просто пытался играть адвоката дьявола. – Anomitra

Смежные вопросы