我试图计算正则表达式,以确定文件名中的月份,并仅返回月份名称。我的代码如下所示:
定义月份(名称):
if re.search('(?<=MLV\s.\s)1', name) or re.search('(?<=MLV\s.\s)+monthName[i]', name):
return('January')
elif re.search('(?<=MLV\s.\s)2', name) or re.search('(?<=MLV\s.\s)+mon[i]', name):
return("February")
etc...
文件名是从文件夹中读入的。 文件名示例:
MLV A 1.4.16.pdf
MLV A 2.7.16.pdf
MLV N 2016年1月
我的代码能够成功地从显示的所有文件示例中确定月份名称,但是我希望消除所有的'elif',并将第一个'if'放入循环中,并返回正确的月份名称。 当我通过一个循环输入if时,我似乎无法将2.7.16(意味着二月的文件名)返回为二月
下面是循环解决方案的尝试:
定义月份(名称):
if re.search('(?<=MLV\s.\s)[1-12]', name) or re.search('(?<=MLV\s.\s)+monthName[i]', name):
return('January') # or February etc...
我也试过:
定义月份(名称):
monthName = ['Jan','Feb','Mar','Apr']
monthNumber = ['1','2','3','4']
for i in range(len(monthName)):
for j in monthNumber:
if re.search('(?<=MLV\s.\s)+monthNumber[j]', name) or re.search('(?<=MLV\s.\s)+monthName[i]', name):
return('January') # or February etc...
当然,我还需要弄清楚如何在重新搜索monthNumber时返回'二月'
感谢您的帮助。 干杯, 标记
我将首先尝试获取文件名中与月份名称对应的部分,然后匹配它:
我会尝试一种混合的方法-这里的
calendar.month_name
是一个常规字典,您可以通过给出对应于月份的整数来获得月份名称,例如1
表示January
。如果你想要月的简短形式,那么使用calendar.month_abbr
而不是calendar.month_name
,例如calendar.month_abbr[1]
将给出'Jan'
输出-
re.findall(r'(MLV\s*\w\s*)(.*?)($|.pdf)',txt)
将返回[('MLV A ', '1.4.16', '.pdf'), ('MLV A ', '2.7.16', '.pdf'), ('MLV N ', 'Jan 2016', '')]
有关此处使用的正则表达式的详细信息,请参见LIVEDEMO
更多细节(年份)-您也可以添加日期,这里我省略了,因为您的数据没有所有日期-
输出-
有关
strftime
格式的详细信息,请参见here相关问题 更多 >
编程相关推荐