正则表达式梳理出包含至少两个0且最多一个1的字符串?

时间:2014-09-20 16:28:23

标签: regex unix

我已经尝试(^.*(?0){2}.*$)来抓住0,但不知道如何抓住1&#39>

所以对于以下数据:

00
110
100
11110011
00111101
00101010
11000000
00000001
10000000

将返回的是100,00000001和10000000

5 个答案:

答案 0 :(得分:2)

如果你的角色只是01,你可以这样做:

^(0+10+|100+|0+01)$

这是demo

答案 1 :(得分:1)

试试这个正则表达式:

^(?=.*0.*0.*)(?=.*1.*)(?!.*1.*1.*).*$

与:

相同
^(?=.*0.*0.*)(?=[^1]*1[^1]*$).*$

使用预见断言:

  • 至少2 zero
  • 至少1 one
  • 最多1 one

DEMO

答案 2 :(得分:0)

使用此模式

^(?=(?:.*0){2})(?=[^1]*1[^1]*$)([01]*)$  
  • ^锚定在开头
  • (?=(?:.*0){2})预测至少两个0&#39>
  • (?=[^1]*1[^1]*$)预测只有一个' 1'到最后
  • ([01]*)捕获任意数量的0和1,或者根据需要更改为(\d*)
  • $锚定在最后 Demo

答案 3 :(得分:0)

使用负前瞻来过滤掉两个1或0或0或0的行:

^(?!.*1.*1|[^0]*(0[^0]*)?$)

答案 4 :(得分:-1)

适用于任何数字组合。

^(?=[02-9]*1[02-9]*$)\d*0\d*0\d*$

DEMO