2015-02-06 2 views
0

У меня есть следующий файл, который я пытаюсь извлечь дату из 20131013.csvPython регулярное выражение найти не соответствует

Использование регулярных выражений (?P<yyyy>\\d{4})(?P<mm>\\d{2})(?P<dd>\\d{2})

def getEffectiveDate(regex, fileName) : 
    parts = 'yyyy-mm-dd' 
    formatString = '%s-%s-%s 00:00:00' 
    regexGroups = parts.split("-") 
    m = re.search(regex, fileName) 
    if m : 
     vals = [] 
     for regexGroup in regexGroups : 
      vals.append(m.group(regexGroup)) 
     value = formatString%tuple(vals) 
    return value 

, когда я прохожу в getEffectiveDate('(?P<yyyy>\\d{4})(?P<mm>\\d{2})(?P<dd>\\d{2})', '20131013.csv') я не нахожу никаких совпадений ,

Однако регулярное выражение (?P<yyyy>\\d{4})-(?P<mm>\\d{2})-(?P<dd>\\d{2}) найти матч на 2013-10-13.csv

Я интересно, если это было вызвано там быть ничем Inbetween регулярных выражения групп, и если есть все, что я могу сделать, чтобы исправить это?

EDIT:

Я нашел решение, делая regex.replace('\\\\', '\\')

Двойной обратный слеш вызывали проблемы с согласования. Я только пробовал регулярное выражение (?P<yyyy>\\d{4})-(?P<mm>\\d{2})-(?P<dd>\\d{2}) как необработанную строку, поэтому он работал в этом случае.

+0

Ваш код работает для меня .. –

ответ

1

Ваш код работает для меня. И лучше определить регулярное выражение как необработанную строку.

>>> re.search(r'(?P<yyyy>\d{4})(?P<mm>\d{2})(?P<dd>\d{2})', '20131013.csv') 
<_sre.SRE_Match object; span=(0, 8), match='20131013'> 
>>> re.search(r'(?P<yyyy>\d{4})(?P<mm>\d{2})(?P<dd>\d{2})', '20131013.csv').group(1) 
'2013' 
>>> re.search(r'(?P<yyyy>\d{4})(?P<mm>\d{2})(?P<dd>\d{2})', '20131013.csv').group(2) 
'10' 
>>> re.search(r'(?P<yyyy>\d{4})(?P<mm>\d{2})(?P<dd>\d{2})', '20131013.csv').group(3) 
'13' 
+0

Как бы я сделать это, когда этот код в функции, которая передается две переменные 'GetDate (регулярное выражение, FileName)', а затем я 're.search (регулярное выражение , fileName) ' – MrSnare

+0

@MrSnare отредактируйте свой вопрос с четким пояснением. , Сначала скомпилируйте регулярное выражение с помощью 'regex = re.compile (r '....')' then do 'regex.search (filename)' –

+0

, пожалуйста, добавьте полный код. –

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