我试图为以下日期变体创建regex模式:示例日期变体如下所示:
04/20/200904/20/094/20/094/3/09每当在输入字符串中遇到类似的模式时,将识别与定义的regex模式相匹配的日期。
我的方法:将整个日期分解为月份、日期和年份部分,并创建regex对象:
month = re.compile(r'(^0?[1-9]$)|(^1[0-2]$)').search('04').group()
day = re.compile(r'(^0?[1-9]$)|(^[12][0-
9]$)|^3[01]$').search('20').group()
year = re.compile(r'(^(19)?\d\d$)|
(^(20)\d\d$)').search('2009').group()
print(month, day, year)单独地,它们工作得很好,我得到了预期的输出;例如:输入字符串:月份=‘04’,日=‘20’和年= '2009‘。
O/P: 04 20 2009
所面临的问题:但是当我将这三个部分(月、日、年)合并为一个正则表达式时,我会出错。
date = re.compile(r'(^0?[1-9]$)|(^1[0-2]$)[/-](^0?[1-9]$)|(^[12][0-
9]$)|(^3[01]$)[/-](^(19)?\d\d$)|(^(20)\d\d$)')
output = date.search('04/20/2009').group()错误: re.compile(r'(^0?1-9$)|(^10-2$)/-|(^12$)|(^301$)/-|(^(20)\d\d$)') = AttributeError
请告诉我,哪里出了问题?如何使用单个正则表达式模式来查找整个日期(月、日、年)?提前感谢!求和
发布于 2018-09-06 14:46:49
^表示行的开始(带有多行标志)或字符串的开始,而$表示行/字符串的结束。因此,将其添加到正则表达式的所有部分将导致不匹配。
此外,您希望只匹配分组的日/月/年。
尝试:^(0?[1-9]|1[0-2])[\/-](0?[1-9]|[12][0-9]|3[01])[\/-]((?:19)?\d\d|(?:20)\d\d)$
请参阅:https://regex101.com/r/eZ2Kx1/1/
特别要注意的是:(?:19)和(?:20)是非捕获组。
但这只是判罚的一部分。我不知道Python,但我想匹配是完全匹配的,所以您可能需要在这里进行更多的编程。
https://stackoverflow.com/questions/52201334
复制相似问题