2011-01-17 19 views

उत्तर

33

आप आगे स्लैश द्वारा अलग अंक के लिए खोज कर सकते हैं:

In [146]: import re 
In [152]: match=re.search(r'(\d+/\d+/\d+)','The date is 11/12/98') 

In [153]: match.group(1) 
Out[153]: '11/12/98' 
बेशक

, अमान्य तिथियां भी मिलान हो जाएगा:

In [154]: match=re.search(r'(\d+/\d+/\d+)','The date is 99/99/99') 

In [155]: match.group(1) 
Out[155]: '99/99/99' 

आप strptime का उपयोग कर तारीख को मान्य कर सकता है (देखें नीचे)।


regex उपयोग करने के बजाय, आप इसे एक datetime.datetime वस्तु है, जो शायद और अधिक उपयोगी है में पार्स सकता है: अगर आगे स्लैश द्वारा अलग अंक के अनुक्रम कोई मान्य दिनांक का प्रतिनिधित्व करता है

In [140]: datetime.datetime.strptime("11/12/98","%m/%d/%y") 
Out[140]: datetime.datetime(1998, 11, 12, 0, 0) 

In [141]: datetime.datetime.strptime("11/12/98","%d/%m/%y") 
Out[141]: datetime.datetime(1998, 12, 11, 0, 0) 

In [143]: date.year 
Out[143]: 1998 

In [144]: date.month 
Out[144]: 11 

In [145]: date.day 
Out[145]: 12 

परीक्षण करने के लिए , आप try..except ब्लॉक का उपयोग कर सकते हैं।

In [159]: try: 
    .....:  datetime.datetime.strptime("99/99/99","%m/%d/%y") 
    .....: except ValueError as err: 
    .....:  print(err) 
    .....:  
    .....:  
time data '99/99/99' does not match format '%m/%d/%y' 
+0

क्षमा करें, मेरी गलती है, मैं यह 4 अंक के खिलाफ परीक्षण किया है :) – Bronek

1

मैं नीचे आरई निम्न स्वरूप में दिनांक के लिए ठीक काम कर रहा लगता है;: अमान्य दिनांक एक ValueError बढ़ा देंगे

  1. 14-11-2017
  2. 14.11.2017
  3. 14 | 11 | 2017

यह से 2000-2099

साल स्वीकार कर सकते हैं कृपया मत भूलना अंत में $ जोड़ने के लिए, यदि यह 14-11-2014 या 20177

स्वीकार नहीं करता है
date="13-11-2017" 

x=re.search("^([1-9] |1[0-9]| 2[0-9]|3[0-1])(.|-)([1-9] |1[0-2])(.|-|)20[0-9][0-9]$",date) 

x.group() 

उत्पादन = '13 -11-2017 '

संबंधित मुद्दे