Regex 用于将9-23位数字与中间任意数量的空格或破折号匹配的正则表达式

Regex 用于将9-23位数字与中间任意数量的空格或破折号匹配的正则表达式,regex,Regex,我尝试了以下正则表达式,但似乎不允许嵌套“[]” [\d[\s-]*]{9-23}你走对了路,你要找的可能是: (\d[\s-]*){8,22}\d 数字 后跟任意数量的空格/破折号 8-22次 后跟最后一位数字 让我们试试这个: ([0-9][ -]*){9,23} 此正则表达式的答案太短,因此我最喜欢的是您似乎不希望匹配前导或尾随空格和破折号,因此我认为可行的模式是: ^\d([- ]*\d){8,22}$ 也就是说:一个数字,后跟8到22组零或多个破折号或空格,后跟一个数字 另一个

我尝试了以下正则表达式,但似乎不允许嵌套“[]”


[\d[\s-]*]{9-23}

你走对了路,你要找的可能是:

(\d[\s-]*){8,22}\d
  • 数字
  • 后跟任意数量的空格/破折号
  • 8-22次
  • 后跟最后一位数字
    • 让我们试试这个:

      ([0-9][ -]*){9,23}
      

      此正则表达式的答案太短,因此我最喜欢的是

      您似乎不希望匹配前导或尾随空格和破折号,因此我认为可行的模式是:

      ^\d([- ]*\d){8,22}$
      
      也就是说:一个数字,后跟8到22组零或多个破折号或空格,后跟一个数字

      另一个可能更明显的解决方案是两步解决方案:

    • 与\d[-\d]+\d匹配,以确保您有一个以至少一个数字开头和结尾的数字、空格和破折号字符串
    • 去掉数字,数一数你有多少

    • 对于它的价值,你可以考虑把它分成两个步骤。例如,在C#中,您可以这样做

      Regex.Match(Regex.Replace(str, "[ -]", ""), @"^\d{9,23}")
      

      这是两个字符串操作,因此如果这对您很重要,当然可能会有性能损失。但是对下一个家伙来说,它可能更具可读性。

      @Bryan:怎么读
      123-
      只有四个字符长,因此它与
      {9-23}
      条件不匹配。它将匹配“123456789-”,这是不应该匹配的(如果我正确理解问题的话)@CanSpice:我在编写它后不久就意识到了我的错误。“123-”不匹配是正确的,但“123456789-”将匹配。这将匹配“123456789-”,这是不应该匹配的(如果我正确理解问题的话)允许在第一个数字之前或最后一个数字之后使用破折号或空格(即:123456789-匹配吗?)?“空格”是指任何空格(例如,包括制表符)?