Python无法使用正则表达式解析日期

时间:2015-08-13 20:11:32

标签: python regex

我有一个程序,用户可以在其中输入字符串并在字符串中包含日期。我使用RegEx来匹配\d+\/\d+\/\d+以从字符串中提取日期,但出于某种原因,在我的测试用例中,只有最后一个条目能够工作

import datetime
import re
dateList = []
dates = ["Foo (8/15/15) Bar", "(8/15/15)", "8/15/15"]
reg = re.compile('(\d+\/\d+\/\d+)')
for date in dates:
    matching = reg.match(date)
    if matching is not None:
        print date, matching.group(1)
    else:
        print date, "is not valid date"

返回

Foo (8/15/15) Bar is not valid date
(8/15/15) is not valid date
8/15/15 8/15/15

我的RegEx有问题吗?我用RegEx101.com对它进行了测试,看起来效果很好

2 个答案:

答案 0 :(得分:1)

如果您正在寻找正则表达式的部分匹配,请使用搜索:

import datetime
import re
dateList = []
dates = ["Foo (8/15/15) Bar", "(8/15/15)", "8/15/15"]
reg = re.compile('([0-9]+/[0-9]+/[0-9]+)')
for date in dates:
    matching = reg.search(date)  # <- .search instead of .match
    if matching is not None:
        print( date, matching.group(1) )
    else:
        print( date, "is not valid date" )

答案 1 :(得分:1)

您正在寻找search(),而不是match()

date_re = re.compile('([0-9]{2})/([0-9]{2})/([0-9]{2})')
e = date_re.match('foo 01/02/13')
# e is None
e = date_re.search('foo 01/02/13')
# e.groups() == ('01', '02', '13')

请勿使用{0}数字的\d,因为there are many strange things\d的Unicode版本匹配。