2015-02-06 62 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

匹配,如果這是由沒有被任何其間的正則表達式組造成我想知道,如果有什麼我可以做些什麼來解決這個問題?

編輯:

我做regex.replace('\\\\', '\\')

雙反斜線導致了一個問題,與之相配找到了解決辦法。我只嘗試過正則表達式(?P<yyyy>\\d{4})-(?P<mm>\\d{2})-(?P<dd>\\d{2})作爲原始字符串,所以它在這種情況下工作。

+0

您的代碼對我的作品.. – 2015-02-06 11:29:48

回答

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(正則表達式,文件名)的函數',然後我做're.search(正則表達式,fileName)' – MrSnare 2015-02-06 11:31:58

+0

@MrSnare用清晰的解釋來編輯你的問題。 。首先通過'regex = re.compile(r'....')編譯正則表達式,然後執行'regex.search(filename)' – 2015-02-06 11:34:23

+0

請添加完整的代碼。 – 2015-02-06 11:50:39