2013-07-16 2 views
3

에 여러 줄을 일치하는 :방법 다음 텍스트로 유니 코드 개체를 감안할 때 정규식

a 
b 
c 
d 
e 

aaaa 
bbbb 
cccc 
dddd 
eeee 

내가 즉, 라인의 두 번째 그룹을 좀하고 싶습니다, 빈 한 후 모든 라인. 사용 된 코드는 다음과 같습니다.

text = ... # the previous text 
exp = u'a\nb\nc\nd\n\e\n{2}(.*\n){5}' 
matches = re.findall(exp, text, re.U) 

실제로 마지막 줄만 검색합니다. 마지막 5 개를 잡으려면 어떻게해야합니까?

답변

4

캡처 그룹 자체를 반복하면 각 일치 항목을 다음 반복으로 덮어 씁니다. 이

exp = ur'a\nb\nc\nd\n\e\n{2}((?:.*\n){5})' 

을 할 경우

당신은 함께 다섯 줄을 얻을.

당신은 수동으로 그룹 철자하지 않는 한 개별 일치에 도달 할 수 없습니다

exp = ur'a\nb\nc\nd\n\e\n{2}(.*\n)(.*\n)(.*\n)(.*\n)(.*\n)' 
+0

정확히 내가 무엇을 찾고 있었습니까. 감사!! – davids

2

왜 그냥 :

text[text.index('\n\n') + 2:].splitlines() 
# ['aaaa', 'bbbb', 'cccc', 'dddd', 'eeee'] 
+0

간단히하기 위해 위 텍스트를 언급했습니다. 그러나 실제 텍스트가 훨씬 더 복잡하고 여러 줄 바꿈이있을 수 있으므로 정규식을 사용해야합니다 – davids

+0

@ davids 빈 줄을 찾는 경우에 대한 의문이 생깁니다 ... 더 좋은 예가 있습니까? –

0

당신의 검색 텍스트가에 대한 제한의 어떤 종류가있는 경우 당신이 원하지 않는 첫 번째 부분의 글자 수, X 글자 이상이 포함 된 단어 만 검색하면 어떨까요?

^[a-z]{2,} 

이렇게하면 모든 단어가 2자를 초과하게됩니다.

당신은 제어 할 수 있습니다

  • {3} 정확히 3 명 발생;
  • {6,} 6 번 이상;
  • {2,5} 2 ~ 5 회 발생.
관련 문제