为什么当我在正则表达式的末尾使用斜杠时,我得到的结果与我没有使用它时不同?即使它应该以同样的方式匹配它。
带斜杠:re.match('data/(?P<yyyy>[12]\d{3})(?P<mm>0?[1-9]|1[0-2])(?P<dd>3[0-1]|[1-2][0-9]|0?[1-9])/', 'data/20221231/file01.csv').groupdict()
给我:{‘dd’: ‘31’, ‘mm’: ‘12’, ‘yyyy’: ‘2022’}
无斜线:re.match('data/(?P<yyyy>[12]\d{3})(?P<mm>0?[1-9]|1[0-2])(?P<dd>3[0-1]|[1-2][0-9]|0?[1-9])', 'data/20221231/file01.csv').groupdict()
个
给我:{‘dd’: ‘23’, ‘mm’: ‘1’, ‘yyyy’: ‘2022’}
1条答案
按热度按时间qpgpyjmq1#
因为
0?[1-9]|1[0-2]
使用了第一个分支的变更和matches only1
:只有当第一分支阻止模式匹配时,才使用第二改变分支。您的第二个模式不匹配日期的所有数字。在模式的末尾出现
/
使其匹配所有数字。如果由于某种原因不能在模式中使用
/
,则至少使用\b
。它将具有类似的效果,在某种意义上,该块的所有数字将被匹配。演示here。