RegEx,string包含至少2个介于1和9之间的数字

时间:2016-09-29 18:19:11

标签: regex

我有一个9位数字,其中最后4位是可选的(5 + 4)。我想说前五个字符中应该至少有两个 [1-9]值(无论位置如何)

工作示例:26505002300002123010
失败的示例:2000002000

我建造了这个,但没有按照我想要的方式工作:

^(?=[1-9]{0,4}\d)\d{5}(-?\d{4})?$

2 个答案:

答案 0 :(得分:1)

对于大多数正则表达式引擎,没有通用的,易于扩展的正则表达式解决方案。在这种情况下,您可以拼出所有可能的组合,例如

^(?!0{5}|0{4}[1-9]|0{3}[1-9]0|0{2}[1-9]0{2}|0[1-9]0{3}|[1-9]0{4})\d{5}(?:-?\d{4})?$
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

如果前5个数字仅包含1个1-9数字而其他数字为零,请参阅负前瞻不匹配的regex demo

但是,如果你要检查的数字超过5位,比如50,这将会变得难以理解。

如果你的正则表达式支持无限宽度的lookbehind(.NET,Python PyPi正则表达式模块),可以使用通用的正则表达式解决方案,你可以使用

^\d{5}(?<=^\d*(?:[1-9]\d*){2})(?:-?\d{4})?$

请参阅this regex demo

(?<=^\d*(?:[1-9]\d*){2}) lookbehind在字符串开头和第5位之间的任何位置都需要2 1-9个数字。

答案 1 :(得分:0)

我认为我的正则表达式使用积极的外观更简单,更易读。

(\d{5})(?<=[1-9]{2})-(\d+)

实例:https://regex101.com/r/CnEw7Z/2

说明 - 将有一组5个数字,在字段中1到9之间必须有2个字符匹配\ d {5}后跟连字符和其他一些数字(\ d +)

让我知道这是否有意义/适合您,并随意根据您的喜好调整捕获组。