2011-11-07 3 views
0

마침표 또는 마침표로 끝나지 않는 일부 텍스트를 포함하는 모든 "제목 줄"을 찾아야하는 정규식이 있습니까? 나 :!Python,이 정규식 작동 방법

tit_pat = re.compile(r"([\w ]+?)(?![!?.])\n",re.UNICODE) 
res = tit_par.findall(data) 

: 예 :

장 1 배 테스트
이 테스트 테스트 테스트 테스트 테스트. 이 테스트는 일부 텍스트와 더 많은 텍스트 ( 텍스트)를 사용하여 테스트합니다.이 테스트는 일부 텍스트 및 텍스트가 더 많은 텍스트와 텍스트를 포함하는 테스트입니다. 이것은 더 많은 텍스트입니다. 더 많은 텍스트가 있습니다. 텍스트가 더 많습니다. 텍스트가 더 있습니다. chapter aaa
테스트입니다. 이 테스트는 일부 텍스트와 더 많은 텍스트가있는 텍스트와 텍스트를 포함합니다. 일부 텍스트와 텍스트는 텍스트와 텍스트가 더 깁니다.
bbbb
끝.

정규식은 마침표와 줄 바꿈이없는 텍스트가 포함 된 모든 "표제"를 찾습니다. 수락하기 전에 마침표가없는 수표 (또는! 또는?)가있는 (부정적) 미리보기 문이 있기 때문에 예상됩니다. 그러나 한 줄로 시작하여 다음 줄의 마침표로 끝나는 문장이있을 수 있습니다. 정규식은 마침표가없는 텍스트가있는 행을 찾지 못합니다. 이 행동에 대한 설명이 있습니까?

답변

1

당신의 정규식은 기본적으로 "가능한 한 적은 단어를 찾아내어 단어 뒤에 원치 않는 문자가없는 단어를 찾은 다음 그 단어 바로 다음에 개행을 찾습니다"를 의미합니다. 단어 검사 부분은 단어의 일부가 아니기 때문에 원하지 않는 문자를 찾지 않으며 개행 문자가 원하지 않는 문자가 아니기 때문에 미리보기 주장이 중복됩니다.

"가장 마지막 문자가 원하지 않는 문자 중 하나가 아닌 행을 찾으십시오"는 것이 좋습니다. 이것은 아마도 정규 표현식을 요구하지 않을 것입니다.하지만 이것을 사용하고 싶다면, 가장 확실한 방법은 한 번에 한 줄씩 텍스트를 가져와 (?<![.!?])$과 같은 것을 search으로 가져 오는 것입니다.

+0

내가 정규식을 사용하는 이유는 일부 검색 작업을 수행하기 위해 큰 파일을 문자열로 읽고 있기 때문입니다. 나는 "미리보기"를 제거했으며 예상대로 계속 수행 중입니다. 감사합니다 칼 Knechtel! – user963386