我有这种模式:^[0-2]{0,1}[0-9]:[0-5][0-9]$
。它检查输入的字符串是否为时间格式,如01:20
,20:30
等。事情是,我需要检查输入的值是否符号正确。因为如果用户开始输入时间并输入第一个符号,则正则表达式不会自动传递,因为假设1
与该模式不匹配。
我的意思是说有人开始输入输入:
1
,然后是0
,然后是:
。这意味着正则表达式检查仍然应该通过,因为用户正在按顺序输入正确的符号。
但如果他说出来了:
1
,0
,:
,然后a
,正则表达式在他输入a
时失败,因为输入了部分时间不正确:10:a
永远不会匹配最终的正则表达式。
因此有一些方法可以使用正则表达式以like
方式匹配模式。通常搜索如何工作,如果你输入了正确的短语,它会找到你的结果。
仅适用于"最终"的代码段值:
In [32]: import re
In [33]: p = re.compile(r'^[0-2]{0,1}[0-9]:[0-5][0-9]$')
In [34]: p
Out[34]: re.compile(r'^[0-2]{0,1}[0-9]:[0-5][0-9]$')
In [35]: p.search('01:')
In [36]: p.search('01:10')
Out[36]: <_sre.SRE_Match at 0x7f163153cf38>
答案 0 :(得分:1)
我可能会指定一个有效的模板&#39;,并检查用该用户输入替换其中的第一个字符是否与正则表达式匹配。
REGEX = re.compile(r'^[0-2][0-9]:[0-5][0-9]$')
TEMPLATE = '00:00'
def check_partial_input(chars):
test_str = chars + TEMPLATE[len(chars):]
return bool(REGEX.search(test_str))
我认为这符合您的意图:
>>> check_partial_input("1")
True
>>> check_partial_input("a")
False
>>> check_partial_input("01:")
True
>>> check_partial_input("01:a")
False
缺点是它与正则表达式中的可选字符之类的东西不能很好地工作(你注意到我需要第一个数字)