匹配以0开头结尾为110/111且不含000的比特序列正则如何写
正确正则实现方案
你需要的正则表达式如下:
import re pat = re.compile(r'0(?:(?!000)[01])*?(?:110|111)')
正则逻辑说明
- 开头固定匹配
0,满足序列以0开头的要求 (?:(?!000)[01])*?是非捕获组,作用为:- 每次匹配1位0或1前,通过负向先行断言
(?!000)保证后续不会出现000子串,满足序列无000的约束 - 非贪婪量词
*?保证匹配到最近的结尾标记就停止,不会出现过度匹配
- 每次匹配1位0或1前,通过负向先行断言
- 末尾的
(?:110|111)匹配结尾要求,序列必须以110或111收尾
测试验证
对你给出的测试用例执行结果如下:
>>> s = '1000001110001011001101011000010101100001001100001111' >>> re.findall(pat, s) ['00111', '0010110', '0110', '0110', '001010110', '00100110', '00111']
和你实现的非正则函数f(s)返回的预期结果完全一致。
内容的提问来源于stack exchange,提问作者AcaNg
相关产品推荐
相关产品推荐

