在python中使用import re从文件名中提取日期
我的文件名如下所示:在python中使用import re从文件名中提取日期,python,regex,Python,Regex,我的文件名如下所示: show_data_paris_12112019.xlsx 我只想提取日期,我尝试了以下脚本: date = os.path.basename(xls) pattern = r'(?<=_)_*(?=\.xlsx)' re.search(pattern, date).group(0) event_date = re.search(pattern, date).group(0) event_date_obj = datetime.strptime (event_da
show_data_paris_12112019.xlsx
我只想提取日期,我尝试了以下脚本:
date = os.path.basename(xls)
pattern = r'(?<=_)_*(?=\.xlsx)'
re.search(pattern, date).group(0)
event_date = re.search(pattern, date).group(0)
event_date_obj = datetime.strptime (event_date, '%Y%m%d')
date=os.path.basename(xls)
pattern=r'(?.*
匹配零个或多个下划线字符的序列
(?在我看来,您使用的正则表达式也有问题,因此在尝试从空返回中对(0)
分组时失败
假设您的所有日期都存储为数字,我制作的以下正则表达式似乎工作得很好
(?!.+_)\d+(?=\.xlsx)
下一个问题是,在格式化日期时,您格式化日期的方式遇到了问题,对我来说,12112019将是2019年11月12日。显然,这也可能是2019年11月12日,但最基本的是,我们更改了strftime格式化日期的方式
因此,对于日期/月/年格式,我们将使用
# %d%m%Y
event_date_obj = datetime.strptime(event_date, '%d%m%Y')
我们只需将%d和%m替换为月/日/年格式。因此,您的完整代码如下所示:
date = os.path.basename(xls)
pattern = "(?!.+_)\d+(?=\.xlsx)"
event_date = re.search(pattern, date).group(0)
event_date_obj = datetime.strptime (event_date, '%d%m%Y')
有关如何使用strftime的更多信息,请参阅。'NoneType'对象没有这样的属性'group',因此搜索失败,返回None
。这是一个测试/设计正则表达式的好工具:我添加了(的固定版本)您的正则表达式和测试字符串。可以随意使用它,并查看输出匹配的内容。这是一个非常有用的工具。在这种情况下,当模式不复杂时,是否应该使用正则字符串方法而不是re
?例如,可以使用xls.split(“)[-1”).split(“.”[0]
date = os.path.basename(xls)
pattern = "(?!.+_)\d+(?=\.xlsx)"
event_date = re.search(pattern, date).group(0)
event_date_obj = datetime.strptime (event_date, '%d%m%Y')