regex 为什么我在正则表达式的末尾使用斜杠时会得到不同的结果?

4smxwvx5  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(71)

为什么当我在正则表达式的末尾使用斜杠时,我得到的结果与我没有使用它时不同?即使它应该以同样的方式匹配它。
带斜杠: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’}

qpgpyjmq

qpgpyjmq1#

因为0?[1-9]|1[0-2]使用了第一个分支的变更和matches only 1:只有当第一分支阻止模式匹配时,才使用第二改变分支。
您的第二个模式不匹配日期的所有数字。在模式的末尾出现/使其匹配所有数字。
如果由于某种原因不能在模式中使用/,则至少使用\b。它将具有类似的效果,在某种意义上,该块的所有数字将被匹配。
演示here

相关问题