在正则表达式

时间:2016-09-13 17:33:24

标签: python regex

我试图从一串二进制数字(0和1)中提取'1'的所有序列,并将它们转换为list
例如,字符串可以是001111000110000111111形式。我正在寻找一个类似于["1111", "11", "111111"]的列表。

我正在使用带有以下findall的python ([1]+?)0函数。但是,它与1的最后一个序列不匹配,因为它以EOS而不是'0'结束。我尝试使用([1]+?)0|$尝试将EOS捕获为有效分隔符。

但那也失败了。
任何帮助都表示赞赏。

3 个答案:

答案 0 :(得分:1)

你在尝试什么:

([1]+?)0

Regular expression visualization

Regex101 Demo

([1]+?)0|$

Regular expression visualization

Regex101 Demo

什么可行:

(1+)

Regular expression visualization

Regex101 Demo

答案 1 :(得分:0)

我认为你正在寻找的正则表达式是:

1+(?!\0)

即。匹配一个或多个未跟随0的1。

你所拥有的是专门寻找后跟0的那些。

你可以在各种jsfiddle网站上玩正则表达式,并对他们正在做的事情进行交互式解释。例如:

https://regex101.com/r/qY4iN9/1

答案 2 :(得分:0)

匹配:要匹配一个或多个1,请使用1+正则表达式。

拆分:您可以拆分1个或多个0并删除空元素。

请参阅Python demo

import re
s = '001111000110000111111'
print(re.findall('1+', s))                   # ['1111', '11', '111111']
print([x for x in re.split('0+', s) if x])   # ['1111', '11', '111111']