写一个表达式,其中包含偶数个0或奇数个1
我得到的是:
1*(01*01*)* + 0*10*(10*10*)*
第一部分表示0的数量为偶数,第二部分表示1的数量为奇数。
然而,据说有一种简化的解决方案,但我没有看到。 有什么提示吗?
写一个表达式,其中包含偶数个0或奇数个1
我得到的是:
1*(01*01*)* + 0*10*(10*10*)*
第一部分表示0的数量为偶数,第二部分表示1的数量为奇数。
然而,据说有一种简化的解决方案,但我没有看到。 有什么提示吗?
奇数位为:0*1(0|10*1)*
偶数位的0取决于:
(1|01*0)*
(1|01*0)+
1*(01*01*)+
(与原帖相同)旧答案:在情况1和2下是正确的
(1*(01*0)*)+ | 0*1(0*(10*1)*)*
感谢 @OGHaza 提供的有用评论。
利用一个事实,即偶数长度的字符串始终符合您的约束条件:
^(([01]{2})*|1*(01*01*)*)$
1*(01*01*)*
替换为(1|01*0)*
(就像@JuliánUrbano的解决方案中那样),会更简短一些。但是没错,非常聪明,+1! - Volatility“最短”是什么意思?如果你寻求最短的评估时间(即最快),那么请确保不使用捕获组。
^(?:1*(?:01*0)*)+|0*1(?:0*(?:10*1)*)*$
^(1*(01*0)*)+|0*1(0*(10*1)*)*$
1+0(0+1)((1+0)(1+0))*
用最少的符号
1*(01*01*)*
这个表达式怎么样:
(1(11)*+(00)*)
^(1(11)*|(00)+)$
- bdean200*1(0|10*1)*
是奇数个1的部分的更短正则表达式。 - Julián Urbano