我正在尝试使用python脚本中的正则表达式从文件名获取日期字符串。这是我的约会st
'2012-09-25 ag.pdf'
要从此文件名获取日期字符串,请使用此正则表达式r'\d{4}[-]\d{1,2}[-]\d{1,2}'
,它可以正常工作
但是某些文件名也包含两位数字的年份,对于那些正在尝试使用另一个正则表达式r'\d{2}-\d{2}-\d{2}'
'2012-09-25 ag.pdf'
也与导致我的脚本出现问题的第二个正则表达式(r'\d{2}-\d{2}-\d{2}'
)模式匹配
我如何在python中使用正则表达式匹配不超过2个数字的精确数字
答案 0 :(得分:2)
您可以为两种情况创建一个正则表达式:
^\d{2,4}-\d{1,2}-\d{1,2}
演示:https://regex101.com/r/nZwZ58/4/
关于第一个版本的好主意是,它更简单易读,但是不好的事情是,它将匹配3位数字的日期。
下一个是更具体但更详细。
^\d\d(\d\d)?-\d{1,2}-\d{1,2}
答案 1 :(得分:1)
您在这里至少有3个选择:
第一个选项:首先匹配4位数字的年份日期,并且匹配,请勿尝试匹配2位数字的年份日期。
第二个选项:修改2位数的年份选项,使其更具限制性:
r'^\d{2}-\d{2}-\d{2}'
第三种选择:在基本名称上使用match
,而不是search
。 match
尝试从一开始就进行匹配。如果找到4位数字,则表示不匹配。
答案 2 :(得分:0)
假设您的日期将始终位于文件名的开头,则可以像这样锚定正则表达式:
r'^\d{2}-\d{2}-\d{2}'
更多文档here
编辑:
也可以使用or
匹配项:
r'^(\d{2}|\d{4})-\d{2}-\d{2}'
答案 3 :(得分:0)
如果文件名始终像这样,则可以在正则表达式前加上^
,使其仅在开头匹配。