正则匹配正好三个数字?

作者站长头像
站长
· 阅读数 52

只能匹配到正好三个连续的数字,少一个数字或者多一个都不可以。比如,

"123" // 返回 123
"123u" // 返回 123
"u123" // 返回 123
"x123y" // 返回 123
"1234" // 返回空
"x1234y" // 返回空
"12" // 返回空
123y456 // 返回 123 和 456

用正则怎么实现啊?我写的 "[^0-9]*[0-9]{3}[^0-9]*" 不对,实在想不出了,有大兄弟支支招么?

回复
1个回答
avatar
test
2024-07-21

根据更新后的条件Python、多组数字),答案更改为:

import re

data = [
    '123',
    '123u',
    'u123',
    'x123y',
    '1234',
    'x1234y',
    '12',
    '123y456',
]

for s in data:
    print(re.findall(r'(?<!\d)(\d{3})(?!\d)', s))

输出:

['123']
['123']
['123']
['123']
[]
[]
[]
['123', '456']

这样?

['123', '123u', 'u123', 'x123y', '1234', '12'].map(s => s.match(/^\D*(\d{3})\D*$/)?.[1])

输出:

['123', '123', '123', '123', undefined, undefined]
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容