You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式需求:匹配字符串中非整串的四位数字

解决四位数字匹配的正则问题

嘿,我来帮你搞定这个正则的问题!你的需求核心是要匹配字符串中独立的四位数字——不能是更长数字的一部分,同时还要解决原正则在四位数字位于字符串末尾时失效的问题,对吧?

问题分析

你之前用的\d{4}[^\d]之所以在末尾失效,是因为它要求四位数字后面必须跟着一个非数字字符,但当四位数字在字符串最后时,后面没有任何字符,自然匹配不上。另外,这个正则也没处理四位数字前面可能有数字的情况(比如五位数字里的前四位),刚好你也需要排除这种属于更长数字的四位序列。

解决方案

我们可以用环视断言来完美解决这个问题,正则表达式如下:

(?<!\d)\d{4}(?!\d)

正则解释

  • (?<!\d):负向后视断言,确保四位数字的前面不是数字(可以是字符串开头,或者非数字字符,比如#、字母等)
  • \d{4}:匹配连续的四位数字
  • (?!\d):负向前视断言,确保四位数字的后面不是数字(可以是字符串结尾,或者非数字字符,比如逗号、空格等)

这样一来,不管四位数字在字符串的开头、中间还是末尾,只要它是独立的(前后没有数字),就能被匹配到;而像五位数字里的四位片段(比如12345里的1234)就会被排除,完全符合你的需求。

验证你的示例

我们用这个正则跑一遍你给的测试用例:

  • #3333, INC343334 → 匹配3333(前后都是非数字,符合条件);INC343334里的四位数字后面跟着数字,不匹配
  • dddd → 无数字,无匹配
  • 3333 → 整个字符串是四位数字,前后都是字符串边界,匹配成功
  • RT4323, INC33334434 → 匹配4323(前后都是非数字);INC33334434里的四位数字后面跟着数字,不匹配
  • INC23455667, #3333 → 匹配3333(前面是非数字,后面是字符串结尾,符合条件)

完全符合你的期望结果!

内容的提问来源于stack exchange,提问作者Leif Ershag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:46:00