2013-10-22 4 views
4

일치하는 텍스트의 결과를 정규 표현식으로 가져 오려고하는데 작동하지 않는 것 같습니다. 누구가 잘못 될지 알고 있습니까?정규 표현식에서 텍스트를 추출 하시겠습니까?

import re 
text = "I want to match anything in <angle brackets>" 
match = re.search("\<(?P<brackets>[^\>]+)>", text) 
if match: 
    print (match.group('brackets')) 

이렇게하면 아무 것도 인쇄되지 않습니다. 즉 일치하는 항목이 없습니다.

답변

6

실제로 이것은 매우 일반적인 오류입니다. 을 사용하려고 할 때 re.match을 사용하는 것처럼 보입니다. re.match은 주어진 텍스트의 시작 부분에서만 일치하지만, re.search은 전체 내용을 검사합니다.

import re 
text = "I want to match anything in <angle brackets>" 
match = re.search("\<(?P<brackets>[^\>]+)>", text) 
if match: 
    print (match.group('brackets')) 

출력 : @ 톰 자크는 매우 잘 나는 그것을 시도 할 때 나를 위해 작동하지 않았다 질문과 답변 모두에 표시된 코드를 질문에 대답하고 있지만

'angle brackets' 
+0

아, 그 트릭을 했어, 나는 조금 더 조심스럽게 읽어야 했어, 고마워! – user2905592

2

. 다음 코드는 작동 :

import re 
text = "I want to match anything in <angle brackets>" 
match = re.search("\<(?P<brackets>.*)\>",text) 
if match: 
    print (match.group('brackets')) 

주 정규 표현식에서 .*)로 텍스트 [^의 교체 및 re.search()에 대한 호출에 text 매개 변수를 포함.

이 답변은 이후 질문과 다른 답변을 모두 수정 된 문제를 해결합니다

(EDIT). 여기에 제안 된 정규 표현식을 변경하면 행의 마지막 문자 인 >까지 캡처되지만 질문과 다른 답변의 정규 표현식은 발견 된 첫 번째 >까지만 텍스트를 캡처합니다.

+0

네 말이 맞아, 나는 사실 질문의 형식을 엉망으로 만들었다. – user2905592

관련 문제