python 正则匹配日期 分隔符匹配相同

1.日期有不同的分隔符,比如 20170101, 2017-01-01, 2017/01/01。我想从一个字符串中提去出所有的日期(不考虑日期合法性)

import re

s = "fsuihfwe20170101zjkdowuieru12017-01-01dasjk02017/01/012131"
reg = re.compile(r'\d{4}[-/]?\d{2}[-/]?\d{2}', re.VERBOSE)
reg.findall(s)

结果:
['20170101', '2017-01-01', '2017/01/01']

但是这样也会匹配2017-01/01, 201701/01的数据
我试着使用命名和后向引用,但是都不能...很好的解决..求帮助

阅读 6.1k
5 个回答

后向引用为啥不能很好地解决呢?你可以试试这样:

import re

s = "fsuihfwe20170101zjkdowuieru12017-01-01dasjk02017/01/012131"
reg = re.compile(r'(\d{4}([-/]?)\d{2}\2\d{2})', re.VERBOSE)
res = reg.findall(s)
\d{4}([-/]?)\d{2}\1\d{2}
>>> s = "fsuihfwe20170101zjkdowuieru12017-01-01dasjk02017/01/012131sfasdf2017/0101asdfasdfa1201701-01asdfasf2017/01-01"
>>> reg = re.compile(r'\d{4}-\d{2}-\d{2}|\d{4}\d{2}\d{2}|\d{4}/\d{2}/\d{2}', re.VERBOSE)
>>> reg.findall(s)
['20170101', '2017-01-01', '2017/01/01']

这样能匹配到...2017/01-01...orz

import re
s = "fsuihfwe20170101zjkdowuieru12017-01-01dasjk02017/01/012131sfasdf2017/0101asdfasdfa1201701-01asdfasf2017/01-01"

split = ['', '/', '-']
reg = re.compile('|'.join([i.join([r'\d{4}',r'\d{2}',r'\d{2}']) for i in split]), re.VERBOSE)
reg.findall(s)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题