2013-09-08 4 views
2

는 여러 개의 공간 즉,로 구분되는 문자열을 분할하기 위해 노력하고있어 예상대로정규 표현식을 사용하여 문자열을 여러 공백으로 나눕니다.

string1 = "abcd efgh a. abcd b efgh" 
    print re.findall(r"[\w.]+") 

는, 결과는 다음과 같습니다

['abcd', 'efgh', 'a.', 'abcd', 'b', 'efgh'] 

그러나, 나는이 '그룹에 싶습니다. ' 같은 그룹에 'abcd'를, 같은 그룹에 'b'와 'efgh'를 입력하십시오. 그래서 내가 원하는 결과는 다음과 같습니다.

['abcd', 'efgh', 'a. abcd', 'b efgh'] 

내 접근 방식은 두 가지 유형의 표현식을 만드는 것입니다. 첫 번째는 공백없이 'abcd'및 'efgh'정규 표현식을 처리합니다. 두 번째는 단일 공간을 가진 것들을 다루는 것입니다. 즉 'a'. + 'abcd'.

그렇다면 [w \] [\ 승] + 는 제 1 타입을 처리 할 수 ​​있으며, R '+ R [\ 승] + 가 제 2 유형을 처리 할 수있다. 하지만 '|'를 사용하여 같은 식으로 결합하는 법을 모르겠습니다.

언제나처럼 다른 방법도 환영합니다. 그리고 시간 내 주셔서 감사합니다!

+0

'\ s \ s +'로 나누기 – gukoff

답변

8
result = [s.strip() for s in string1.split(' ') if s.strip()] 

공간에 분리 및 제거 (사용) 결과에서 불필요한 공간을 제거하는 단계를 포함한다. 당신이 re.findall를 사용하려면

4

,이 표현 사용할 수 있습니다,

>>> string1 = "abcd efgh a. abcd b efgh" 
>>> print re.findall(r"\S+(?:\s\S+)*", string1) 
['abcd', 'efgh', 'a. abcd', 'b efgh'] 

(?:\S+(?:\s\S+)*)가 존재하는 경우 하나의 공간과 이상의 비 공백 문자를 여러 번 다음에 비 공백 문자를 발견을이되도록 너무 작동합니다

>>> string1 = "abcd efgh a. abcd b efgh ijkl" 
>>> print re.split(r"\s{2,}", string1) 
['abcd', 'efgh', 'a. abcd', 'b efgh ijkl'] 
,369 : 그렇지 않으면

>>> string1 = "abcd efgh a. abcd b efgh ijkl" 
>>> print re.findall(r"\S+(?:\s\S+)*", string1) 
['abcd', 'efgh', 'a. abcd', 'b efgh ijkl'] 

,은 2 개 이상의 공백으로 분리를 사용하는 것이 훨씬 간단합니다

+0

왜''re.findall ("\ S + (? : \ s \) *")''''그냥? 또한 모든 백 슬래시는 단순한 백 슬래시 문자가 아닌 re compilator에 의해 메타 문자로 해석되도록 의도되어 있기 때문에 문자열을 rawing하는 것은 완전히 쓸모가 없습니다. – eyquem

+0

@eyquem're.findall()'은 2 ~ 3 개의 인수를 허용하기 때문에? 're.findall ("\ S + (? : \ s \ S +) *")'을 실행 해 보셨습니까? 내가하면 오류가 발생합니다. 그리고 원시 문자열을 사용하는 것은 습관이기 때문에 역 슬래시를 다른 방식으로 해석해야 할 때 오류를 피할 수 있습니다. – Jerry

+0

필자는 분명히 두 번째 인수를 쓰는 것을 잊어 버렸습니다. "re.findall ("\ S + (? : \ s \ S +) * ", string1)'' – eyquem

관련 문제