簡體   English   中英

如何將時間字符串與 python re 模塊匹配?

[英]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 ffff2019/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM