2011-01-17 29 views

Trả lời

33

Bạn có thể tìm kiếm các chữ số cách nhau bởi phía trước-slashes:

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' 

Tất nhiên, ngày tháng không hợp lệ cũng sẽ phù hợp:

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' 

Bạn có thể xác nhận ngày sử dụng strptime (xem dưới đây).


Thay vì sử dụng regex, bạn có thể phân tích nó thành một đối tượng datetime.datetime, mà có lẽ hữu ích hơn:

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 

Để kiểm tra xem một chuỗi các chữ số cách nhau bởi phía trước-slashes đại diện cho một ngày hợp lệ , bạn có thể sử dụng khối try..except. Ngày không hợp lệ sẽ tăng ValueError:

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

Xin lỗi, lỗi của tôi, tôi đã thử nghiệm với 4 chữ số :) – Bronek

1

Tôi tìm thấy RE bên dưới hoạt động tốt cho Ngày theo định dạng sau;

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

Nó có thể chấp nhận năm từ 2000-2099

Xin đừng quên để thêm $ vào cuối, nếu không chấp nhận $ 14-11-201 hoặc 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() 

đầu ra = '13 -11-2017 '

Các vấn đề liên quan