需要正则表达式来匹配恰好为 n 位数的一个或多个数字。

6
我需要一个正则表达式来匹配一个或多个n位数字,用逗号分隔,例如:
abc12345def 返回 12345 abc12345,23456def 返回 12345,23456
目前我得到了这个: \d{5}(,\d{5})*
问题是它也会匹配以下情况:
123456 返回 12345,但如果数字超过5位数,则不应匹配。所以我需要恰好为5位数字,如果数字太短或太长则不匹配。
谢谢
3个回答

5

您使用的正则表达式是哪种语言?您需要在\d{5}周围放置非数字标记;这里是Perl语法(由Lukasz进行了负向前/后看修复):

(?<![\d,])\d{5}(,\d{5})*(?![\d,])

其实我想我懂了!"(?<!\d)\d{5}(?!\d)(,(?<!\d)\d{5}(?!\d))*" 我使用了前瞻和后顾。 - Lukasz
这个对我来说可行,它能捕获我没有的“部分匹配”(例如:abc12345,12345,123xyz)。 - Colin O'Dell
@Colin O'Dell:它不应该匹配那些情况,但我不确定是否已经指定。当您针对输入进行测试时,我假设您得到了12345,12345作为匹配部分,对吗?可能需要在前瞻和后顾断言中加入逗号以及数字。 - Jeremiah Willcock
@Jeremiah:我觉得很不错!我绝对喜欢你的解决方案,比我的好多了 :P 如果Lukasz也需要捕获,只需添加一个非常简单的内容即可:(?<![\d,])(\d{5}(?:,\d{5})*)(?![\d,])(结果:http://i.imgur.com/8yrdJ.png) - Colin O'Dell
жҲ‘е®һйҷ…дёҠжҳҜеңЁжөӢиҜ•жҚ•иҺ·пјҢдҪҶжҳҜеңЁ*йғЁеҲҶжІЎжңүдҪҝз”Ё?:пјҲжҲ‘еҸӘжү“еҚ°дәҶ$1пјүгҖӮ - Jeremiah Willcock

3

实际上,我认为我明白了!(?<!\d)\d{5}(?!\d)(,(?<!\d)\d{5}(?!\d))*

我使用了前瞻和后顾。

谢谢。


0
你可以使用这个:
/\D?\d{5}(?:,\d{5})?\D?/

说明:

/   : regex delimiter
\D? : non digit optionnal
\d{5}   : 5 digits
(?: : begining of non-capture group
,\d{5}  : comma and 5 digits
)?  : end of group optionnal
\D? : non digit optionnal
/   : regex delimiter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接