[英]How could I match time string with python re module?
我想將時間字符串 python 與 python re 模塊匹配。 我的代碼是這樣的:
import re
def match_time(el):
year = '(?:19|20)[0-9]{2}'
month = '(?:0?[1-9]|1|[0-2])'
day = '(?:0?|[1-9]|[1-2][0-9]|3[0-1])'
hour = '(?:[0-1]?[0-9]|2[0-4])'
minute = '(?:[0-5]?[0-9])'
second = '(?:[0-5]?[0-9])'
sep = '\s?'
date_pattern = '{year}[/-]{month}[/-]{day}'.format(year=year, month=month, day=day)
time_pattern = '(?:{sep}{hour}:{minute}:{second})?'.format(sep=sep, hour=hour, minute=minute, second=second)
p = date_pattern + time_pattern
m = re.findall(p, el)
return m
el = '2019/3/23 0:11:01 fxxxxxff fff'
m = match_time(el)
print(m)
這個的 output 是2019/3/
。 請問我的代碼有什么錯誤? 我希望 function 可以匹配2019/3/23 0:11:01 fxxxxx ffff
和2019/3/23 fffdddd dddwww
這樣的句子,所以我添加了一個?
在time_pattern
之后,但 output 很奇怪。 請問我怎樣才能使它工作?
在我的工作中,我幾乎總是假設 Regex 在搜索選項時是貪婪的。 當你給它0?
作為第一個選項,它允許一個空字符串(這是你想要的嗎?我假設不是),它將 select 是有效的解決方案。 所以重新排序你的正則表達式會起作用。
year = '(?:19|20)[0-9]{2}'
month = '(?:0?[1-9]|1[0-2])'
day = '(?:[1-2][0-9]|3[0-1]|0?[1-9])'
hour = '(?:[0-1]?[0-9]|2[0-4])'
minute = '(?:[0-5]?[0-9])'
second = '(?:[0-5]?[0-9])'
sep = '\s?'
這捕獲了您想要的 output,盡管我懷疑它是最有效的方法,但它與您自己的工作差異最小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.