我想从字符串中提取恰好 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]/
这匹配一个由五个数字组成的序列,后跟一个非数字字符。