2012-12-11 3 views
1

나는 이것을 풀 수 없다는 점에 좌절감을 느낀다.하지만 나는 미지의 단어 (일부는 공백, 일부는 숫자, 일부는 밑줄 친다)를 선택하는 정규 표현식을 정의하고자한다.Python 정규식이 끝나는 행

내가 '알 수없는 단어의 양'이라고 말하면 더 현실적이라면 10 개로 제한해야합니다. 기본적으로 파일 이름을 검사하고 10 단어 이상 있다고 의심하지 않지만 제한을 설정하지 않는 것이 좋습니다.

내가 지금까지 가지고있는 가장입니다

tc = re.findall(r'FROM CLIP NAME:\s\s(\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*)', text) 

어디 CLIP 이름에서 : \의 \의 '각 라인의 시작 부분에있을 것입니다.

위의 시도는 공백뿐만 아니라 줄 바꿈을 읽는 데 실패하고 다음 줄의 데이터도 가져옵니다.

+0

샘플 입력 파일과 예상 출력을 제공 할 수 있으면 다른 사람들이 귀하의 요구 사항을 더 잘 이해할 수 있습니다. –

답변

2

정규식을 사용하지 않으시겠습니까?

점검, 라인이 "FROM CLIP NAME: "로 시작하고 있는지 다음이 시작을 차단하고 나머지 문자열을 반환 :

title = "FROM CLIP NAME: " 
for line in lines: 
    if line.startswith(title): 
     tc = line[len(title):] 

이 반복을 라인을 통해 때문에 line 만 줄 바꿈 할 때까지 항상 간다.

줄 (또는 파일 개체) 목록이없고 대신 텍스트가있는 경우 for line in text.splitline()을 사용하십시오.

3
FROM CLIP NAME:\s{2}([\w\s]*)$ 

당신은 (또한 \w\s 같은 미리 정의 된 문자 클래스가 될 수 있음) 허용 된 문자를 정의하고 그 임의의 수를 수용하기 위해 문자 클래스를 사용할 수 있습니다. 그런 식으로 당신은 그것이 무엇을 담을 지 정말로 신경 쓰지 않을 것입니다. 문자가 인 문자과 정확히 일치하도록 점 .을 사용할 수도 있습니다.

꼬리말 $은 정규 표현식의 끝에 줄 끝이 있어야합니다. $에 대한 행 기반 동작의 경우 일반 표현식에 re.M 플래그를 사용해야합니다. 그렇지 않으면 $이 문자열의 끝과 일치합니다. 귀하의 경우 FROM CLIP NAME:

re.compile('FROM CLIP NAME:\s{2}([\w\s]*)$', re.M) 

경우 다음 정규 표현식을 사용해서는 안 정적 접두사입니다. eumiro가 보여준 것처럼 회선을 반복하고 접두어를 제거하십시오.

+0

'$', '.' 're.M'이 내 모든 탐구선을 해결했습니다! 많은 감사 – hemmy