2012-05-12 2 views
2

내 언어 입력이 같이 보입니다 파이썬간단한 정규식 문제

입니다. 지금까지 내가 함께

>>> 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 0 0', '1 0 0 0', '1 1 0 0') 

또는 4 개 개의 숫자의 모든 설정 :

내가 출력을 원하는 아무것도 가까이오고 있지 않습니다. 여기에 나와있는 몇 가지 것들은 나에게 새롭고 나는 문서를 읽는 중이지만 잘 어울리지 않는 것을 조각으로 나눌 수는 없다. 주목할 가치가없는 이유는 지금 내가 왜 그 마지막 0 ...

입력은 결국 많은 라인이 될 것이지만 만약 그것이 작은 경우에 효과가 있다면 나는 번역 할 것이라고 확신한다. 당신은 list comprehension을 확인해야

감사

+2

정규식을 사용해야합니까? '.split()'과'.join()'을 사용하면 아마 더 간단해질 것입니다. –

+0

나는 물을 생각하지도 않은 많은 질문에 대한 많은 답변을 제공합니다. 내가 정규식을 사용할 필요가 없다는 것을 지적 해 주셔서 감사합니다. –

답변

6

나는 이것에 대한 정규 표현식을 사용하지 않을 것입니다.

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

:

>>> 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'] 
+2

변수의 이름을'string' 모듈과 동일한 이름으로하지 않는 것이 가장 좋습니다 – jamylak

+0

좋은 점, 표준 "MyX"형식으로 변경되었습니다. – Josiah

3
: 여기


ideone합니다 (itertools 문서에서 복사) grouper의 소스 코드입니다 : 온라인으로 작업을 참조하십시오

>>> [' '.join(x) for x in grouper(4, truth.split())] 

: 대신 itertools documentationrecipes에서 grouper를 사용

파이썬에 익숙하지는 않지만 정규 표현식을 약간 바꿀 수 있고 대신 re.findall()을 사용할 수 있습니다.

re.findall('(?:[0-1]\s*){4}', '0 0 0 0 1 0 0 0 1 1 0 0') 
+0

+1 정규 표현식이어야하는 경우이 방법이 효과적입니다. –

1

이것은 수행합니다

>>> tuple(' '.join(x) for x in zip(*[iter(''.join(s.split()))]*4)) 
('0 0 0 0', '1 0 0 0', '1 1 0 0') 

당신이 정말 정규식하려면 :

>>> 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'] 

당신이 튜플하려면

>>> [x.strip() for x in re.findall(r'(?:\d\s*){4}',s)] 
['0 0 0 0', '1 0 0 0', '1 1 0 0'] 
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