2012-01-14 3 views
1

정규식에 약간의 문제가 있습니다.파이썬 정규식과 여러 번 찾으십시오

내 텍스트에서 모든 "기사"콘텐츠를 찾고 싶습니다. 두 개의 기사 사이에 "장"이있을 수 있지만 그 순간에는 전달합니다. ipsum의 슬픔이 diamArticle 1Maecenas ligula의 마사, 는, 미 A, 언제나 congue, euismod 비를 varius, AMET 앉아

장 1Lorem :

은 여기 내 텍스트 (더 \ n을 없음)입니다. 프로 빈 porttitor 챕터 2uis 아케이드의 제 2 사물의 제 3 사물의 부드럽게 제 2의 말을 더하기. 도박 판돈 ipsum의 primis faucibus orci luctus 등 ultrices posuere cubilia Curae

에 여러 경기를 얻으려면, 내가) (나는 findall은 사용해야합니다 같아요. 하지만 내 작은 정규식이 작동하지 않습니다 :

re.findall(r"""Article\s(?P<number>\d+)(?P<content>.*)""",content,re.UNICODE) 

내용 PARAM 내 모든 텍스트를 얻을. 입니다. * 그래서 정규식이 텍스트에서 여러 번 일치 할 수있는 방법은 무엇입니까? findall()을 사용할 필요가 없거나 정규 표현식이 유효하지 않습니다.

누구든지 아이디어가 있다면 감사합니다.

Ps : 저는이 작업을 진행하기 위해서만 정규 표현식을 사용하고 싶습니다.

답변

2

Article\s 또는 입력이 끝날 때까지 모든 것을 삼켜 야합니다.

re.findall(r"""Article\s(?P<number>\d+)(?P<content>.*?)(?=Article\s|$)""",content,re.UNICODE) 

또 다른 해결책은 Article\s에 대해 분할하는 것입니다,하지만 당신은 첫 번째 갈라 그룹을 삭제해야합니다 : 이것은 긍정적 예측 시험 다음에 게으른 한정 기호를 사용하여 수행 할 수 있습니다. 처음부터 분리 된 각 그룹은 다음과 같이 복습하게됩니다 :

^(?P<number>\d+)(?P<content>.*)$ 
0

re.findall은 정상입니다. 모든 일치 항목에서 텍스트 그룹을 추출 할 수 있습니다.

this 예제를 볼 수도 있습니다.

관련 문제