我想从字符串中提取恰好 5 位数字。
如果我尝试
\d{5}
这适用于"12345"
or "a12345a"
,但它也匹配我不想要"12345"
的字符串。"123456"
我可以试试
\d{5}\D
但随后字符串"12345a"
将在“a12345a”中匹配。有没有得到只是号码?
要匹配正好是五位数的数字,即使它被字母包围,请使用正则表达式
(?<!\d)\d{5}(?!\d)
这匹配五个数字 ( \d{5}
),它们既不在 ( (?<!\d)
) 之前,也不在 ( ) 之后(?!\d)
有数字。
字边界 ( \b
) 在这里不起作用,因为它们不允许12345
在a12345a
.
在regex101.com上查看演示。
(\d{5})[^a-zA-Z]
是正确的方法。
(\d{5})
正在捕获的是 5 个数字,并且[^a-zA-Z]
表示下一个字符不能是字母。
编辑:
为了清楚起见:\b(\d{5})\b
当您想要 5 位数字被边界包围时使用(令牌' , . "
,当然还有空格。
/\d{5}[^\d]/
这匹配一个由五个数字组成的序列,后跟一个非数字字符。