【问题标题】:Regular Expression for positive and negative numbers int values separated by spaces正负数 int 值的正则表达式,以空格分隔
【发布时间】:2012-07-15 10:29:03
【问题描述】:

对于

positive number RegExp is ^[0-9]+$
negative number is ^-[0-9]+$

但是如何在数字之间添加空格并首先接受任何数字,无论是正数还是负数

【问题讨论】:

  • 你能提供一些有效和无效的例子吗?

标签: c# asp.net .net regex


【解决方案1】:

我可以为您提供一个适用于 Ruby 的模式(抱歉,我已经有一段时间没有使用 C#了)。如果与 scan 函数一起使用,此模式将捕获数字。我相信您可以在 C# 中使用捕获和组来做一些类似的事情:

pattern = /^\s*(
   [\-\+]?
   [0-9]+
 )
 (
   (\s+
     [\-\+]?
     [0-9]+
   )
 )*$/x

xs = ["9", "+9", "-9", "87", "+87", "-87", "9  87", "9 +87", "9  -87", "+9 87", 
"-9 87", "+9 +87", "-9 +87", "-9 87", "9 +9 -9", "9 +9  87", "9 +9  +87", 
"9 +9  -87", "9 +9 654", "9 +9 +654", "9 +9 -654", "9 -9  87", "9 -9  +87", 
"9 -9  -87", "9 -9 654", "9 -9 +654", "9 -9 -654", "9  87  +87", "9  87  -87", 
"9  87 654", "9  87 +654", "9  87 -654", "9  +87  -87", "9  +87 654", 
"9  +87 +654", "9  +87 -654", "9  -87 654", "9  -87 +654", "9  -87 -654", 
"9 654 +654", "9 654 -654", "9 +654 -654", "+9 -9  87", "+9 -9  +87", 
"+9 -9  -87", "+9 -9 654", "+9 -9 +654", "+9 -9 -654", "+9  87  +87", 
"+9  87  -87", "+9  87 654", "+9  87 +654", "+9  87 -654", "+9  +87  -87", 
"+9  +87 654", "+9  +87 +654", "+9  +87 -654", "+9  -87 654", "+9  -87 +654", 
"+9  -87 -654", "+9 654 +654", "+9 654 -654", "+9 +654 -654", "-9  87  +87", 
"-9  87  -87", "-9  87 654", "-9  87 +654", "-9  87 -654", "-9  +87  -87", 
"-9  +87 654", "-9  +87 +654", "-9  +87 -654", "-9  -87 654", "-9  -87 +654", 
"-9  -87 -654", "-9 654 +654", "-9 654 -654", "-9 +654 -654", " 87  +87  -87", 
" 87  +87 654", " 87  +87 +654", " 87  +87 -654", " 87  -87 654", 
" 87  -87 +654", " 87  -87 -654", " 87 654 +654", " 87 654 -654", 
" 87 +654 -654", " +87  -87 654", " +87  -87 +654", " +87  -87 -654", 
" +87 654 +654", " +87 654 -654", " +87 +654 -654", " -87 654 +654", 
" -87 654 -654", " -87 +654 -654", "654 +654 -654"]

xs.each{|x| printf("%15s: %s\n", x, x.scan(pattern).inspect) }

结果:

                  9: ["9"]
                 +9: ["+9"]
                 -9: ["-9"]
                 87: ["87"]
                +87: ["+87"]
                -87: ["-87"]
              9  87: ["9", "87"]
              9 +87: ["9", "+87"]
             9  -87: ["9", "-87"]
              +9 87: ["+9", "87"]
              -9 87: ["-9", "87"]
             +9 +87: ["+9", "+87"]
             -9 +87: ["-9", "+87"]
              -9 87: ["-9", "87"]
            9 +9 -9: ["9", "+9", "-9"]
           9 +9  87: ["9", "+9", "87"]
          9 +9  +87: ["9", "+9", "+87"]
          9 +9  -87: ["9", "+9", "-87"]
           9 +9 654: ["9", "+9", "654"]
          9 +9 +654: ["9", "+9", "+654"]
          9 +9 -654: ["9", "+9", "-654"]
           9 -9  87: ["9", "-9", "87"]
          9 -9  +87: ["9", "-9", "+87"]
          9 -9  -87: ["9", "-9", "-87"]
           9 -9 654: ["9", "-9", "654"]
          9 -9 +654: ["9", "-9", "+654"]
          9 -9 -654: ["9", "-9", "-654"]
         9  87  +87: ["9", "87", "+87"]
         9  87  -87: ["9", "87", "-87"]
          9  87 654: ["9", "87", "654"]
         9  87 +654: ["9", "87", "+654"]
         9  87 -654: ["9", "87", "-654"]
        9  +87  -87: ["9", "+87", "-87"]
         9  +87 654: ["9", "+87", "654"]
        9  +87 +654: ["9", "+87", "+654"]
        9  +87 -654: ["9", "+87", "-654"]
         9  -87 654: ["9", "-87", "654"]
        9  -87 +654: ["9", "-87", "+654"]
        9  -87 -654: ["9", "-87", "-654"]
         9 654 +654: ["9", "654", "+654"]
         9 654 -654: ["9", "654", "-654"]
        9 +654 -654: ["9", "+654", "-654"]
          +9 -9  87: ["+9", "-9", "87"]
         +9 -9  +87: ["+9", "-9", "+87"]
         +9 -9  -87: ["+9", "-9", "-87"]
          +9 -9 654: ["+9", "-9", "654"]
         +9 -9 +654: ["+9", "-9", "+654"]
         +9 -9 -654: ["+9", "-9", "-654"]
        +9  87  +87: ["+9", "87", "+87"]
        +9  87  -87: ["+9", "87", "-87"]
         +9  87 654: ["+9", "87", "654"]
        +9  87 +654: ["+9", "87", "+654"]
        +9  87 -654: ["+9", "87", "-654"]
       +9  +87  -87: ["+9", "+87", "-87"]
        +9  +87 654: ["+9", "+87", "654"]
       +9  +87 +654: ["+9", "+87", "+654"]
       +9  +87 -654: ["+9", "+87", "-654"]
        +9  -87 654: ["+9", "-87", "654"]
       +9  -87 +654: ["+9", "-87", "+654"]
       +9  -87 -654: ["+9", "-87", "-654"]
        +9 654 +654: ["+9", "654", "+654"]
        +9 654 -654: ["+9", "654", "-654"]
       +9 +654 -654: ["+9", "+654", "-654"]
        -9  87  +87: ["-9", "87", "+87"]
        -9  87  -87: ["-9", "87", "-87"]
         -9  87 654: ["-9", "87", "654"]
        -9  87 +654: ["-9", "87", "+654"]
        -9  87 -654: ["-9", "87", "-654"]
       -9  +87  -87: ["-9", "+87", "-87"]
        -9  +87 654: ["-9", "+87", "654"]
       -9  +87 +654: ["-9", "+87", "+654"]
       -9  +87 -654: ["-9", "+87", "-654"]
        -9  -87 654: ["-9", "-87", "654"]
       -9  -87 +654: ["-9", "-87", "+654"]
       -9  -87 -654: ["-9", "-87", "-654"]
        -9 654 +654: ["-9", "654", "+654"]
        -9 654 -654: ["-9", "654", "-654"]
       -9 +654 -654: ["-9", "+654", "-654"]
       87  +87  -87: ["87", "+87", "-87"]
        87  +87 654: ["87", "+87", "654"]
       87  +87 +654: ["87", "+87", "+654"]
       87  +87 -654: ["87", "+87", "-654"]
        87  -87 654: ["87", "-87", "654"]
       87  -87 +654: ["87", "-87", "+654"]
       87  -87 -654: ["87", "-87", "-654"]
        87 654 +654: ["87", "654", "+654"]
        87 654 -654: ["87", "654", "-654"]
       87 +654 -654: ["87", "+654", "-654"]
       +87  -87 654: ["+87", "-87", "654"]
      +87  -87 +654: ["+87", "-87", "+654"]
      +87  -87 -654: ["+87", "-87", "-654"]
       +87 654 +654: ["+87", "654", "+654"]
       +87 654 -654: ["+87", "654", "-654"]
      +87 +654 -654: ["+87", "+654", "-654"]
       -87 654 +654: ["-87", "654", "+654"]
       -87 654 -654: ["-87", "654", "-654"]
      -87 +654 -654: ["-87", "+654", "-654"]
      654 +654 -654: ["654", "+654", "-654"]

【讨论】:

  • 由于采用了严格的测试方法,这个答案应该得到 10 票赞成。
  • @usr 你的愿望只用了~6年就实现了:-)
【解决方案2】:

这可以工作:

^[\-\+\s]*[0-9\s]+$

【讨论】:

  • 这样你就不会捕捉到第一个数字之后的任何数字,或者任何超过一个数字的第一个数字。
  • 嗯,如果他的意思是一系列数字,如“-9 9 3 -4”等,则为真……我只是认为他想要一个数字,但数字之间可以有空格。 .
  • 我认为上面关于需要一些测试数据的评论是一个很好的评论,这将消除这里问题中的很多困惑 - 我想我会建议 meta 向提问者这样做。 (这对于一个星期天来说太多递归了!:)
  • 我在这里提出了关于meta的建议meta.stackexchange.com/questions/139847/…
猜你喜欢
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 2012-03-30
  • 1970-01-01
  • 2015-03-23
  • 2021-06-14
  • 2017-08-29
相关资源
最近更新 更多