Regular expression to match a non-zero, zero-padded integer
我需要一个模式的帮助来匹配一个不全是零的填充整数。它可以有0到n个前导零。到目前为止,我有:
但由于最后一个零,这并不能得到像000860这样的东西。我觉得这应该很简单,但我不明白。任何帮助都将不胜感激。
编辑:一些人问这是哪种引擎/语言。我以为瑞格是标准化的,所以没关系。但它是.NET。
- 为什么不在$前加[0-9]{0,}或[0-9]*呢?(顺便说一句:你也可以省略{1},这是隐含的)。
- @Wrikken——因为这样,000000就可以工作了。
- 不,因为你还需要在里面装上[1-9]。因此,非零是必要的。
- 啊……你说得对。那是有效的。
- 不过,下面的其他答案对于regex引擎来说效率要高一些;)
为什么不使用:
?顺便说一句,您没有指定正在使用的regex引擎。但是上面的模式应该适用于几乎所有的regex引擎。
- 为什么0*在前零位而不是最后一个零位工作?换句话说,我为什么不能这样做:^0*[1-9]0*$?
- 您使用的是哪种编程语言或regex引擎?
- 这将给您留下任意数量的零,后跟一个正整数,后跟任意数量的零。您可以通过这样做来调整您的建议:^0*[1-9]*0*,但这将使您得到一个正则表达式,该正则表达式与中间的零不匹配,如:00342010。如果用d*或[0-9]*替换结尾的0*,那么您应该得到您想要的。
- @S.C.00100或001000是否有效?顺便问一下,你的答案有什么不同?
- @hek2mgl——.net
- 是的,根据我对问题的解释,这两个都是有效的。如果这不是需要的,那么0+应该在开始时替换0*。
- @hek2mgl——是的,00100和001000是有效的。
- @hek2mgl,唯一的区别是d而不是显式的[0-9],我的是在你的几秒钟后提交的。
- 哪个效率更高?
- @roryap你不能做^0*[1-9]0*,因为这意味着:0-x zeros、one number from 1 to 9、0-x zeros。只匹配:0100、00020、00001,不匹配0110。
- @hek2mgl——是的,我现在看到了。
- @罗里亚普,只是抬头看了看,学到了一些新东西。stackoverflow.com/questions/17194645/…好问题;谢谢提问。
- @看起来像是通信错误:)。你的评论,第三条,只是没有给我,而是给你的答案的操作+1!即使它是在我的之后一秒钟…(HIHI:)…
- 哦,对不起。
- 好吧,我希望我能接受多个答案,但我必须效率地去做:)谢谢大家。
- 好决定!谢谢!还有一件事:下次当你有一个regex问题时,你应该在你的问题中命名regex引擎。这有时很重要,因为它们之间的语法不同。
只需尝试以下regex:
这个正则表达式呢?^0*[1-9]\d*$
你想赶上860吗?
1
| "000860".match(/^0*([1-9][0-9]*)$/)[1] |
- 谢谢你的回答,不过稍微解释一下就好了。
- 括号完全没用。此外,您对所使用的语言进行了假设,没有添加任何解释,甚至没有提供真正的regex,而是一个表达式将常量字符串与regex匹配,并返回第二个匹配项,这将引发超出范围的索引异常(或类似的异常)-1
- @Vogel612-我说过要匹配860。regex101.com/r/ta8jc4/1
- regex实际上是可用的。但是!.NET将regex与字符串匹配:因此new Regex("/^0*[1-9][0-9]*$/").Matches("000860");是正确的。此btw返回Match类型的结果。我的观点是,你的回答值得投反对票。
好吧,这是我的看法:
0+[1-9]+[0-9]{0,}
它捕获至少一个零(在第一个0之后追加?,而不是+,如果可能没有前导零),至少一个非零数字,然后是任何数量的零和其他数字。
如果你想捕捉不带零的数字:
0+([1-9]+[0-9]{0,})
只需将部分放在捕获组的前导零之后。
在这里玩
成功分析所有这些:
1 2 3 4 5
| 000860
000860123
000800
000810
0008 |