转换为python正则表达式

转换为python正则表达式,python,regex,Python,Regex,我有点困惑,因为我试图使用一个正则表达式,我已经测试过了,但在Python中似乎不起作用 ^(3[01]|[12][0-9]|0?[1-9])/(1[0-2]|0?[1-9])/(?:[0-9]{2})?[0-9]{2}$ 我正在尝试匹配mm/yy和dd/mm/yyy您的正则表达式而不是reggae:有趣的是,标题语法已经与python兼容 你是怎么用的?向我们展示您的代码并告诉我们您的期望 更简单的方法是: >>> import re >>> x = '3

我有点困惑,因为我试图使用一个正则表达式,我已经测试过了,但在Python中似乎不起作用

^(3[01]|[12][0-9]|0?[1-9])/(1[0-2]|0?[1-9])/(?:[0-9]{2})?[0-9]{2}$

我正在尝试匹配mm/yy和dd/mm/yyy

您的正则表达式而不是reggae:有趣的是,标题语法已经与python兼容

你是怎么用的?向我们展示您的代码并告诉我们您的期望

更简单的方法是:

>>> import re
>>> x = '30/12/15'
>>> print(re.search('^(\d{2})/(\d{2})/(\d{2,4})$', x).groups())
('30', '12', '15')
>>> x = '30/12/2015'
>>> print(re.search('^(\d{2})/(\d{2})/(\d{2,4})$', x).groups())
('30', '12', '2015')
您可以开始这方面的工作,并在正则表达式仍然在测试之间匹配的情况下,越来越深入地进行阐述

笔记 你明白吗

(?:  )
这适用于分组而不捕获

如果您希望返回“15”,请不要使用此选项

最后但并非最不重要的一点是,当正则表达式变得如此复杂时,请使用python本身:

>>> x = '30/12/2015'
>>> a = x.split("/")
>>> if a[0] >=1 and a[0] <= 31 ... # to be completed

这应该会起作用,并且与您所做的类似

([01]?[0-9])\/([0-3]?[0-9])\/([0-9]{2,4})
兄弟,试试这个

'(3[01]|[12][0-9]|0?[1-9])/([0]*[1-9]|[1][012])/([0-9]{2,4})'
我已经测试过了,你可以检查一下

我正在尝试匹配mm/yy和dd/mm/yyyy

您的正则表达式已与dd/mm/yyyy匹配。要匹配mm/yy,只需将dd/part包含在?:?中,使其成为可选的?就像你对世纪数字所做的那样

regex = '^(?:(3[01]|[12][0-9]|0?[1-9])/)?(1[0-2]|0?[1-9])/(?:[0-9]{2})?[0-9]{2}$'
import re
print re.match(regex, '30/12/15').group(0,1,2)
#('30/12/15', '30', '12')

print re.match(regex, '12/15').group(0,1,2)
#('12/15', None, '12')

哇,鲍勃·马利的儿子来了,大家请继续收看^^您在哪里/如何测试此正则表达式?我觉得这根本不对。你有没有把它当作一根粗线?例如,regex=r'^\d'@cricket_007:始终是一个好问题,但在这种情况下,这是没有意义的,因为根本没有反斜杠。是否可以将此扩展为MM/YY?当然。只需删除第二部分:[01]?[0-9]\/[0-9]{2,4}这是贬义的。老实说,我无法区分你的回答中的咆哮,与实际的回答本身,即使有一个。如果你懒得回答一些有帮助的问题,那么请不要回答。这里没有批评或贬损。我给出了解决这个问题的更好的线索:使用python而不是复杂的正则表达式。
^(3[01]|[12][0-9]|0?[1-9])/(1[0-2]|0?[1-9])/(?:[0-9]{2})?[0-9]{2}$
regex = '^(?:(3[01]|[12][0-9]|0?[1-9])/)?(1[0-2]|0?[1-9])/(?:[0-9]{2})?[0-9]{2}$'
import re
print re.match(regex, '30/12/15').group(0,1,2)
#('30/12/15', '30', '12')

print re.match(regex, '12/15').group(0,1,2)
#('12/15', None, '12')