正则表达式匹配特定长度的数字

时间:2011-01-28 04:48:54

标签: python regex

我希望匹配一个15位数字(作为更大的正则表达式字符串的一部分)。现在,我有

\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d

但我觉得必须有更清洁的方法来做到这一点。

3 个答案:

答案 0 :(得分:29)

您通常可以按如下方式执行范围:

\d{4,7}

表示最少4位,最多7位。对于您的特定情况,您可以使用单参数变体\d{15}

Python's regular expressions支持这两种表单 - 在该链接中查找文字{m,n}

请注意,\d{15}将匹配该行中任意位置的十五位数字,包括一个400位数字。如果你想确保它只有十五,你可以使用类似的东西:

^\d{15}$

使用开始和结束锚点,或

^\D*\d{15}\D*$

允许任意一方的任意非数字。

答案 1 :(得分:26)

如果您的正则表达式语言与Perl兼容:\d{15}

很难说在不知道将使用此代码段的外部上下文的情况下如何处理边缘(因此您不会意外地抓取额外的数字)。明确的与上下文无关的解决方案是:

(?:(?<!\d)\d{15}(?!\d))

你可以将它放在任何正则表达式的中间,它将匹配(并且只匹配)正好15位数的序列。然而,这很尴尬,而且通常是不必要的。假定非字母数字边界(例如,数字周围的空格)的更简单版本是:

(?:\b\d{15}\b)

但如果字母紧跟在序列之前或之后,它就不会起作用。

在上述两种情况下,外部(?: ... )只是一个包围构造,以避免与周围正则表达式的优先级问题。是否需要也取决于具体情况。

答案 2 :(得分:0)

我有两种限制数字的方法。

使用 len

Courier New

此输出将为True / False。

使用正则表达式

num = 1234
len(str(num)) <= 4

输出将是正则表达式对象或无。