我正在尝试匹配包含:
和.
的时间,但也可以为空。
例如:
Match:
No Match: 5.564
Match: 1:23.321
Match: 12:02.213
No Match: 59.999
我有:
([0-9:\.]*)
但我不确定如何确保如果匹配,它还包含:
答案 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
我稍后会对正则表达式进行性能测试。