我的语言是python
输入看起来像:
'0 0 0 0 1 0 0 0 1 1 0 0'
等等。
我想要输出:
('0 0 0 0', '1 0 0 0', '1 1 0 0')
或每组4个数字都是它自己的元素
到目前为止,我已经把它放在一起了>>> truth = re.compile('(([0-1]\D*?){4})*')
>>> truth.search('0 0 0 0 1 0 0 0').groups()
('0 0 0 0', '0')
或者几个类似的事情,但没有什么比这更近了。这里的一些事情对我来说是新的,我正在阅读文档,但似乎无法拼凑出什么分崩离析。值得注意的是我现在不知道为什么我会得到最后的0 ...
输入最终会有很多行,但如果它适用于小型情况,我相信它会翻译过来。
感谢
答案 0 :(得分:6)
我不会为此使用正则表达式。而是使用recipes上的itertools documentation中的grouper
:
>>> [' '.join(x) for x in grouper(4, truth.split())]
查看在线工作:ideone
以下是grouper
的源代码(从itertools文档中复制):
from itertools import izip_longest
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
答案 1 :(得分:3)
我不是非常狡猾的Python,但你可以稍微改变你的正则表达式并改用re.findall()
。
re.findall('(?:[0-1]\s*){4}', '0 0 0 0 1 0 0 0 1 1 0 0')
答案 2 :(得分:1)
您应该查看list comprehension:
>>> MyString = '0 0 0 0 1 0 0 0 1 1 0 0'
>>> [MyString[x:x+7] for x in range(0,len(MyString),8)]
>>> ['0 0 0 0', '1 0 0 0', '1 1 0 0']
答案 3 :(得分:1)
这样做:
>>> s='0 0 0 0 1 0 0 0 1 1 0 0'
>>> [' '.join(x) for x in zip(*[iter(''.join(s.split()))]*4)]
['0 0 0 0', '1 0 0 0', '1 1 0 0']
如果你想要一个元组:
>>> tuple(' '.join(x) for x in zip(*[iter(''.join(s.split()))]*4))
('0 0 0 0', '1 0 0 0', '1 1 0 0')
如果你真的想要一个正则表达式:
>>> [x.strip() for x in re.findall(r'(?:\d\s*){4}',s)]
['0 0 0 0', '1 0 0 0', '1 1 0 0']
答案 4 :(得分:0)
一个疯狂的解决方案只是为了好玩:
import math
s = '0 0 0 0 1 0 0 0 1 1 0 0'
step = 8
result = [s[0+i*step:step+i*step] for i in xrange(int(math.ceil(float(len(s))/step)))]
print result