我有以下文件,我试图从20131013.csv
使用正则表达式(?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 :(得分: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'