Python 正则表达式,带(?:)表示分组,结尾为$

Python 正则表达式,带(?:)表示分组,结尾为$,python,regex,python-3.x,Python,Regex,Python 3.x,我有普通快车 (?P<month>[1-9]|1[012])/(?P<day>([0-2])?[1-9]|3[01])/(?P<year>([0-2]\d)*\d\d) 我得到了所有的比赛,但不知何故,非比赛继续阻碍着我 "5/1/00" "3/1/00" "1/1/20" "1/1/2000" 如何正确地对它们进行分组?我想在最后使用(?:)和$,但不知怎么还是卡住了?感谢您的帮助 我在pythex.org上尝试我的代码 正则表达式也匹配子字符串;您需要

我有普通快车

(?P<month>[1-9]|1[012])/(?P<day>([0-2])?[1-9]|3[01])/(?P<year>([0-2]\d)*\d\d)
我得到了所有的比赛,但不知何故,非比赛继续阻碍着我

"5/1/00" "3/1/00" "1/1/20" "1/1/2000"
如何正确地对它们进行分组?我想在最后使用(?:)和$,但不知怎么还是卡住了?感谢您的帮助


我在pythex.org上尝试我的代码

正则表达式也匹配子字符串;您需要添加开始和结束锚定

如果仅匹配整个字符串,请使用:

^(?P<month>[1-9]|1[012])/(?P<day>([0-2])?[1-9]|3[01])/(?P<year>([0-2]\d)*\d\d)$

像这样使用单词边界:

\b(?P<month>[1-9]|1[012])/(?P<day>([0-2])?[1-9]|3[01])/(?P<year>([0-2]\d)*\d\d)\b
\b(?P[1-9]| 1[012])/(?P([0-2])?[1-9]| 3[01])/(?P([0-2]\d)*\d\b

我尝试使用^$,但python报告不匹配@那么你的约会对象可能是长串的
^
仅在字符串开头匹配,因此
“1/1/2000”
有效,但
“foo:1/1/2000”
无效。
(?<!\d)(?P<month>[1-9]|1[012])/(?P<day>([0-2])?[1-9]|3[01])/(?P<year>([0-2]\d)*\d\d)(?!\d)
>>> import re
>>> dates = re.compile(r'(?<!\d)(?P<month>[1-9]|1[012])/(?P<day>([0-2])?[1-9]|3[01])/(?P<year>([0-2]\d)*\d\d)(?!\d)')
>>> dates.findall('Match: 1/1/2000, 1/1/00, 1/01/00, 1/31/00, 2/31/2000, 1/1/0000')
[('1', '1', '', '2000', '20'), ('1', '1', '', '00', ''), ('1', '01', '0', '00', ''), ('1', '31', '', '00', ''), ('2', '31', '', '2000', '20'), ('1', '1', '', '0000', '00')]
>>> dates.findall('Not Match: 05/1/00, 13/1/00, 2/005/00, 1/32/00, 1/1/200, 1/1/20000, 5/0/2000 ')
[]
\b(?P<month>[1-9]|1[012])/(?P<day>([0-2])?[1-9]|3[01])/(?P<year>([0-2]\d)*\d\d)\b