匹配特定长度数字的正则表达式
我想要匹配一个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
但是如果字母紧挨着这个数字序列的前面或后面,这个方法就不管用了。