繁体   English   中英

Python Regex上完全匹配的数字或数字限制

[英]Digit or Number limit with exact match on Python Regex

我正在使用Python 2.7.3我有以下功能:

def is2To4Numbers(q):
    if re.match('[0-9]{2,4}',q):return True
    else: return False

我试图限制从2到4的位数。但我得到这些结果。

>>> is2To4Numbers('1235')
True

>>> is2To4Numbers('1')
False

>>> is2To4Numbers('12345')
True

>>> is2To4Numbers('1234567890')
True

我似乎无法获得正确的限制。 我该怎么解决这个问题? 除了使用{m,n}之外还有其他方法吗? 或者我甚至正确使用{m,n}?

你的正则表达式只查找2到4位数字,它们存在于较大的数字中。 添加这个:

'^[0-9]{2,4}$'

使用内置的数值测试并添加大于和小于这样的检查可能要容易得多:

def is2To4Numbers(q):
    try:
        return 10 <= int(q) <= 9999
    except:
        return False

如果你想在一个更大的字符串中搜索确切的2到4位数,因此不能使用^$作为模式的一部分,那么你可以使用负面的后视?<! )和负面的前瞻( ?! ):

import re

def is2To4Numbers(q):
    return bool(re.search(r'''(?x)    # verbose mode
                              (?<!\d) # not preceded by a digit 
                              \d{2,4} # 2-to-4 digits
                              (?!\d)  # not followed by a digit
                              ''',q))

tests = ['1', '12', '123', '1234', '12345', 'foo12', '123bar']
for test in tests:
    print('{t:6} => {r}'.format(t = test, r = is2To4Numbers(test)))

产量

1      => False
12     => True
123    => True
1234   => True
12345  => False
foo12  => True
123bar => True

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM