What regular expression in Python do I use to match dates like this: "11/12/98"?
Both return the first match of a substring found in the string, but re. match() searches only from the beginning of the string and return match object if found. But if a match of substring is found somewhere in the middle of the string, it returns none.
Instead of using regex, it is generally better to parse the string as a datetime.datetime
object:
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)
You could then access the day, month, and year (and hour, minutes, and seconds) as attributes of the datetime.datetime
object:
In [143]: date.year Out[143]: 1998 In [144]: date.month Out[144]: 11 In [145]: date.day Out[145]: 12
To test if a sequence of digits separated by forward-slashes represents a valid date, you could use a try..except
block. Invalid dates will raise a 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'
If you need to search a longer string for a date, you could use regex to search for digits separated by forward-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'
Of course, invalid dates will also match:
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'
To check that match.group(1)
returns a valid date string, you could then parsing it using datetime.datetime.strptime
as shown above.
I find the below RE working fine for Date in the following format;
It can accept year from 2000-2099
Please do not forget to add $ at the end,if not it accept 14-11-201 or 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()
output = '13-11-2017'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With