使用正则表达式可以更精确地匹配两位数

时间:2019-06-10 11:21:59

标签: regex python-3.x date

我正在尝试使用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个数字的精确数字

4 个答案:

答案 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}

演示:https://regex101.com/r/nZwZ58/3/

答案 1 :(得分:1)

您在这里至少有3个选择:

第一个选项:首先匹配4位数字的年份日期,并且匹配,请勿尝试匹配2位数字的年份日期。

第二个选项:修改2位数的年份选项,使其更具限制性:

r'^\d{2}-\d{2}-\d{2}'

第三种选择:在基本名称上使用match,而不是searchmatch尝试从一开始就进行匹配。如果找到4位数字,则表示不匹配。

答案 2 :(得分:0)

假设您的日期将始终位于文件名的开头,则可以像这样锚定正则表达式:

r'^\d{2}-\d{2}-\d{2}'

更多文档here

编辑: 也可以使用or匹配项:

r'^(\d{2}|\d{4})-\d{2}-\d{2}'

答案 3 :(得分:0)

如果文件名始终像这样,则可以在正则表达式前加上^,使其仅在开头匹配。