2017-12-30 2 views
0

목록 내의 튜플 쌍과 일치하는 정규 표현식을 찾습니다. 아래 정규 표현식을 사용하고 있습니다.Python 정규식 쌍 튜플 쌍

s = '[(aleakedteaserand, NN), (abehind, IN), (the, DT)]'  
re.findall(r'\((.*,.*)\)',s) 

하지만 여전히 괄호가 없습니다.

['aleakedteaserand, NN), (abehind, IN), (the, DT'] 

예상 출력 :

[(aleakedteaserand, NN), (abehind, IN), (1, DT)]

+0

넣어 적절한 인용 부호. –

답변

6

당신은 정규식이 ungreedy하지 않았다. 해결책은 re.findall(r'\((.*?,.*?)\)',s)입니다.

+0

질문에서 언급 한대로 예상 결과를 얻으려면 이스케이프 처리 된'('를 괄호 안의 're.findall (r'(\ (. *?,? *? \)) '로 옮깁니다. –

+0

@Wray 아니요. OP는 일치하지만 괄호를 캡처하지 않으려합니다. –

+0

@Wray 예상 된 출력의 대괄호와 괄호는이 경우에 findall이 반환하는 튜플의 목록입니다. –

1

대안. 첫 번째는 보완 검색을 사용합니다. 보완 검색은 사용할 수없는 경우 욕심이 아닌 검색의 대안으로 자주 사용됩니다.

>>> re.findall(r'\(([^)]*)\)',s) 
['aleakedteaserand, NN', 'abehind, IN', 'the, DT'] 

>>> re.split('\), \(', s.strip('[()]')) 
['aleakedteaserand, NN', 'abehind, IN', 'the, DT'] 

없음 정규식

예상 출력
>>> s.strip('[()]').split('), (') 
['aleakedteaserand, NN', 'abehind, IN', 'the, DT']