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

MrG*_*ass 23 python regex

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

\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d
Run Code Online (Sandbox Code Playgroud)

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

pax*_*blo 32

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

\d{4,7}
Run Code Online (Sandbox Code Playgroud)

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

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

请记住,该\d{15}行将匹配15行数字,包括400位数字.如果你想确保它只有十五,你可以使用如下:

^\d{15}$
Run Code Online (Sandbox Code Playgroud)

它使用开始和结束锚点,或

^\D*\d{15}\D*$
Run Code Online (Sandbox Code Playgroud)

允许任意一方的任意非数字.

  • 如果你正好15,你需要锚定:例如,查找`^\d {15} $`,这确保两边都没有 - 它只接受一个正好15个字符长的字符串,所有字符都是数字. (2认同)

Mar*_*tos 29

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

如果不知道将使用此代码段的外部上下文,很难说如何处理边缘(因此您不会意外地抓取额外的数字).明确的与上下文无关的解决方案是这样的:

(?<!\d)\d{15}(?!\d)
Run Code Online (Sandbox Code Playgroud)

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

\b\d{15}\b
Run Code Online (Sandbox Code Playgroud)

但如果字母紧跟在序列之前或之后,它将不起作用.

在上述两种情况下,外部\d{15}... \d{15}只是一个包围结构,以避免周围正则表达式的优先问题.是否需要也取决于具体情况.