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

52

我想匹配一个15位数字作为较大的正则表达式字符串的一部分。目前我有:

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

但我觉得一定有更简洁的方法来做这件事。


1
请查看以下程序相关内容的翻译:要获取想法,请查看https://gist.github.com/SHi-ON/b2ae4100f50b2e2d96ff8277632cc325 - Shayan Amani
3个回答

69

通常可以按以下方式操作范围:

\d{4,7}

这意味着最少4个数字,最多7个数字。对于你的特定情况,你可以使用一个参数的变体,\d{15}

这两种形式都受到Python正则表达式的支持-在此链接中查找文本{m,n}

请记住\d{15}将匹配行中任何位置的十五个数字,包括400位数。如果你想确保它只有这十五个数字,你可以使用类似以下的代码:

^\d{15}$

使用起始和结束锚点的方法,或者

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

允许任意非数字位于两侧。


是的,那就是我的问题——我忘记锚定我的测试。 - MrGlass
1
请记住,$ 匹配换行符;请使用 \Z - John Machin
这允许匹配,但不允许从较长的字符串中提取x位数字。 - Marco Marsala

58

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

不知道这段代码将在哪种环境下使用,所以很难说如何处理边缘情况(以避免意外捕获额外的数字)。一个明确的与上下文无关的解决方案是:

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

你可以把这个正则表达式放在任何位置,它将匹配(且仅匹配)一个长度为15的数字序列。然而,它相当笨拙,通常是不必要的。更简单的版本假定非字母数字边界(例如,在数字周围的空格),如下:

\b\d{15}\b

但是如果这些字母紧接在该序列的前面或后面,它将不起作用。


使用内置的Python正则表达式库。 - MrGlass
您的答案是最好的,因为它不仅允许从较长的字符串中匹配和提取x位数,而且还很方便。 - Marco Marsala

-4

我有两种方式来限制数字。

一种是使用len函数,

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

这个输出将会是True / False。

使用正则表达式

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接