假設我有一個字串如下:
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
所以這里穩健的方法應該是這個答案。
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']}
uj5u.com熱心網友回復:
使用re.findall:
inp = '2021/12/23 13:00 14:00 2021/12/24 13:00 14:00 15:00'
matches = re.findall(r'\d{4}/\d{2}/\d{2}(?: \d{1,2}:\d{2})*', inp)
print(matches)
這列印:
['2021/12/23 13:00 14:00', '2021/12/24 13:00 14:00 15:00']
正則運算式的解釋:
\d{4}/\d{2}/\d{2} match a date in YYYY/MM/DD format
(?: \d{1,2}:\d{2})* match a space followed by hh:mm time, 0 or more times
uj5u.com熱心網友回復:
您可以使用此findall split解決方案:
import re
s = '2021/12/23 13:00 14:00 2021/12/24 13:00 14:00 15:00'
for i in re.findall(r'\d /\d /\d (?:\s\d \:\d ) ', s): print (i.split())
輸出:
['2021/12/23', '13:00', '14:00']
['2021/12/24', '13:00', '14:00', '15:00']
代碼演示
\d /\d /\d (?:\s\d \:\d ) 匹配后跟 1 個或多個時間字串的日期字串。
你。也可以使用:
print ([i.split() for i in re.findall(r'\d /\d /\d (?:\s\d \:\d ) ', s)])
要獲得輸出:
[['2021/12/23', '13:00', '14:00'], ['2021/12/24', '13:00', '14:00', '15:00']]
uj5u.com熱心網友回復:
您可以使用 PyPi 正則運算式庫來使以下作業:
import regex
pattern = regex.compile(r'(?P<date>\d /\d /\d )(?:\s (?P<time>\d :\d )) ')
for m in pattern.finditer('2021/12/23 13:00 14:00 2021/12/24 13:00 14:00 15:00'):
print(m.capturesdict())
輸出:
{'date': ['2021/12/23'], 'time': ['13:00', '14:00']}
{'date': ['2021/12/24'], 'time': ['13:00', '14:00', '15:00']}
請參閱Python 演示。
由于 PyPi 正則運算式庫不會“忘記”組內的所有捕獲,并且如果組已命名,則match.capturesdict()回傳所有組及其捕獲的字典。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/410299.html
標籤:
下一篇:如何通過分隔符拆分行?
