Python正则表达式:"喜欢"正则表达式?

时间:2017-01-23 14:32:16

标签: python regex

我有这种模式:^[0-2]{0,1}[0-9]:[0-5][0-9]$。它检查输入的字符串是否为时间格式,如01:2020:30等。事情是,我需要检查输入的值是否符号正确。因为如果用户开始输入时间并输入第一个符号,则正则表达式不会自动传递,因为假设1与该模式不匹配。

我的意思是说有人开始输入输入:

1,然后是0,然后是:。这意味着正则表达式检查仍然应该通过,因为用户正在按顺序输入正确的符号。

但如果他说出来了:

10:,然后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>

1 个答案:

答案 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

缺点是它与正则表达式中的可选字符之类的东西不能很好地工作(你注意到我需要第一个数字)