Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用import re从文件名中提取日期_Python_Regex - Fatal编程技术网

在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')