正则表达式查找字符串之间的所有模式

Regex find ALL patterns between string

我想从这样的字符串中匹配“000”或 \b 和“000”或“000”和 \b 之间的数字:

11101110001011101000000011101010111

我试过这样的表达方式:

(?<=000)\d+(?=000)

但我只得到最大的出现

我希望得到:

1110111
1011101
0
11101010111

您可以使用 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() 会失败并出现以下错误:

error: look-behind requires fixed-width pattern

这是因为 re 不支持 可变长度环视 regex 支持。

你可以像这样使用 re 模块:

re.findall(r'(?:\b|(?<=000))(\d+?)(?:000|\b)', s)