我想匹配一个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}
将匹配行中任何位置的十五个数字,包括400位数。如果你想确保它只有这十五个数字,你可以使用类似以下的代码:
^\d{15}$
使用起始和结束锚点的方法,或者
^\D*\d{15}\D*$
允许任意非数字位于两侧。
$
匹配换行符;请使用 \Z
。 - John Machin如果你的正则表达式语言是Perl兼容的: \d{15}
。
不知道这段代码将在哪种环境下使用,所以很难说如何处理边缘情况(以避免意外捕获额外的数字)。一个明确的与上下文无关的解决方案是:
(?<!\d)\d{15}(?!\d)
你可以把这个正则表达式放在任何位置,它将匹配(且仅匹配)一个长度为15的数字序列。然而,它相当笨拙,通常是不必要的。更简单的版本假定非字母数字边界(例如,在数字周围的空格),如下:
\b\d{15}\b
但是如果这些字母紧接在该序列的前面或后面,它将不起作用。
我有两种方式来限制数字。
一种是使用len函数,
num = 1234
len(str(num)) <= 4
这个输出将会是True / False。
使用正则表达式,
import re
num = 12324
re.match(r'(?:(?<!\d)\d{4}(?!\d))', str(num))
输出将是正则表达式对象或None。