繁体   English   中英

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

[英]Regex to match digits of specific length

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

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

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

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

\d{4,7}

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

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

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

^\d{15}$

使用开始和结束锚点,或

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

这允许任意一侧的非数字。

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

如果不知道将在其中使用此代码段的外部上下文,则很难说出如何处理边缘(这样您就不会意外抓取额外的数字)。 明确的独立于上下文的解决方案是这样的:

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

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

\b\d{15}\b

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

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

使用len

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

此输出将为真/假。

使用正则表达式

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

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

暂无
暂无

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

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