我想匹配“000”之间的数字或者来自\ b和“000”或“000”的数字以及来自这样的字符串的\ b:
11101110001011101000000011101010111
我尝试过这样的表达式:
(?<=000)\d+(?=000)
但我只获得最大的出现次数
我希望得到:
1110111
1011101
0
11101010111
答案 0 :(得分:1)
您可以使用regex
package和.findall()
方法:
In [1]: s = "11101110001011101000000011101010111"
In [2]: import regex
In [3]: regex.findall(r"(?<=000|^)\d+?(?=000|$)", s)
Out[3]: ['1110111', '1011101', '0', '00011101010111']
000|^
和000|$
有助于分别匹配000
或字符串的开头和结尾。另请注意?
之后的\d+
- 我们正在制作non-greedy。
请注意,在这种情况下,常规re.findall()
将失败,并出现以下错误:
错误:后视需要固定宽度模式
这是因为re
不支持可变长度的外观,但是regex
会这样做。
答案 1 :(得分:1)
您可以使用re模块执行此操作:
re.findall(r'(?:\b|(?<=000))(\d+?)(?:000|\b)', s)