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组零或多个破折号或空格,后跟一个数字
另一个可能更明显的解决方案是两步解决方案:
对于它的价值,你可以考虑把它分成两个步骤。例如,在C#中,您可以这样做
Regex.Match(Regex.Replace(str, "[ -]", ""), @"^\d{9,23}")
这是两个字符串操作,因此如果这对您很重要,当然可能会有性能损失。但是对下一个家伙来说,它可能更具可读性。@Bryan:怎么读
123-
只有四个字符长,因此它与{9-23}
条件不匹配。它将匹配“123456789-”,这是不应该匹配的(如果我正确理解问题的话)@CanSpice:我在编写它后不久就意识到了我的错误。“123-”不匹配是正确的,但“123456789-”将匹配。这将匹配“123456789-”,这是不应该匹配的(如果我正确理解问题的话)允许在第一个数字之前或最后一个数字之后使用破折号或空格(即:123456789-匹配吗?)?“空格”是指任何空格(例如,包括制表符)?