【发布时间】:2022-01-13 09:50:16
【问题描述】:
假设我有一个字符串如下:
2021/12/23 13:00 14:00 2021/12/24 13:00 14:00 15:00
date 多次与time 一起出现。正则表达式是否有可能在每个date 之后找到所有时间,如下所示?
[('2021/12/23', '13:00','14:00'), ('2021/12/24', '13:00','14:00','15:00')]
我在 Python 中尝试了以下代码,但它只返回第一次:
re.findall(r'(\d+/\d+/\d+)(\s\d+\:\d+)+','2021/12/23 13:00 14:00 2021/12/24 13:00 14:00 15:00')
>>>[('2021/12/23', ' 14:00'), ('2021/12/24', ' 15:00')]
附录: 原来的问题其实是一个比较复杂的情况,时间之间有几个文本,很难直接替换成'':
2021/12/31 14:00 start 15:00 end 17:00 pending 18:00 ok 2021/12/31 14:00 begin 15:00 end 17:00 start 18:00 suspend
所以这里的鲁棒方法应该是this answer。
pattern = regex.compile(r'(?P<date>\d{4}/\d+/\d+)(?:\s?(?P<time>(\d+:\d+))\s+([^\d]+))+')
for m in pattern.finditer('2021/12/31 14:00 start 15:00 end 17:00 pending 18:00 ok 2021/12/30 14:00 begin 15:00 end 17:00 ggh 18:00 suspend'):
print(m.capturesdict())
>>> {'date': ['2021/12/31'], 'time': ['14:00', '15:00', '17:00', '18:00']}
{'date': ['2021/12/30'], 'time': ['14:00', '15:00', '17:00', '18:00']}
【问题讨论】: