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

52 投票
3 回答
121948 浏览
提问于 2025-04-16 10:45

我想要匹配一个15位的数字(这是一个更大正则表达式的一部分)。现在,我有了

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

但我觉得应该有更简单的方法来做到这一点。

3 个回答

-4

我有两种方法可以限制数字的范围。

第一种是用 len

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

这样输出的结果会是 True 或 False。

第二种是用 正则表达式

import re
num = 12324
re.match(r'(?:(?<!\d)\d{4}(?!\d))', str(num))

这样输出的结果会是一个正则表达式对象或者是 None。

71

你可以用以下方式来表示数字的范围:

\d{4,7}

这表示最少4位,最多7位数字。对于你的具体情况,你可以使用一个参数的写法,\d{15}

这两种写法在Python的正则表达式中都是支持的——你可以在那个链接中找到{m,n}的相关内容。

需要注意的是,\d{15}会匹配行中任何地方的十五个数字,包括一个400位的数字。如果你想确保只匹配这十五个数字,可以使用类似下面的写法:

^\d{15}$

这使用了行的开始和结束标记,或者

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

这允许在两边有任意非数字字符。

58

如果你的正则表达式语言是兼容Perl的,可以使用:\d{15}

要说怎么处理边界(这样你就不会意外地多抓到数字),其实很难,因为这要看你这个代码片段会用在什么地方。一个不依赖上下文的确切解决方案是:

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

你可以把这个放在任何正则表达式的中间,它会匹配(并且只匹配)恰好15个数字的序列。不过,这样做有点麻烦,而且通常也没必要。一个更简单的版本是,假设数字的边界不是字母或数字(比如,数字周围有空格):

\b\d{15}\b

但是如果字母紧挨着这个数字序列的前面或后面,这个方法就不管用了。

撰写回答