仅当组包含另一个字符时,正则表达式匹配

时间:2018-01-25 15:04:04

标签: python regex

我正在尝试匹配包含:.的时间,但也可以为空。

例如:

Match:
No Match: 5.564
Match: 1:23.321
Match: 12:02.213
No Match: 59.999

我有:

([0-9:\.]*)

但我不确定如何确保如果匹配,它还包含:

4 个答案:

答案 0 :(得分:2)

dates = ['','5.564','1:23.321','12:02.213','59.999']
def check_date(dates):
    for date in dates:
        if (not date) or ('.' in date and ':' in date):
             yield date
list(check_date(dates))
>>>['', '1:23.321', '12:02.213']

答案 1 :(得分:1)

你可以试试这个:

import re
s = ['', '5.564', ' 1:23.321', ' 12:02.213', ' 59.999']
new_s = filter(lambda x:bool(re.findall('\.\w+:|:\w+\.|^$', x)), s)

输出:

['', ' 1:23.321', ' 12:02.213']

测试:

s = [['Match', ''], ['No Match', '5.564'], ['Match', ' 1:23.321'], ['Match', ' 12:02.213'], ['No Match', ' 59.999']]
for a, b in s:
   assert (a == 'Match')  == bool(re.findall('\.\w+:|:\w+\.|^$', b))
print('passed')

输出:

passed

答案 2 :(得分:1)

这个正则表达式适合你:

'^\d+:\d{2}\.\d{3}$|^$'

答案 3 :(得分:0)

在某些情况下,Regexing实际上可能比简单的python慢​​。

这是一个python函数来检查你的匹配(假设你知道它是时间):

def acceptable_time(test_value):
   return test_value == '' or \
               '.' in test_value and ':' in test_value

我稍后会对正则表达式进行性能测试。