我有一个程序,用户可以在其中输入字符串并在字符串中包含日期。我使用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对它进行了测试,看起来效果很好
答案 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版本匹配。