2014-12-24 2 views
0

괄호 안의 모든 내용을 어떻게 추출 할 수 있습니까?괄호 안의 모든 내용을 추출하는 방법

string = "int funt (char* dst, char* src, int length); void bar (int a, short b, unsigned long c) "; 

import re 
pat = re.compile(r'([^(]+)\s*\(([^)]+)\)\s*(?:,\s*|$)') 

lst = [t for t in pat.findall(string)] 
print lst 

이 정확한 결과를 제공하지 않습니다.

답변

1
(?<=\()[^)]+(?=\)) 

보십시오. 데모를보십시오. 괄호 안에 내용을 찾기 위해

https://regex101.com/r/gQ3kS4/35

import re 
p = re.compile(ur'(?<=\()[^)]+(?=\))') 
test_str = "int funt (char* dst, char* src, int length); void bar (int a, short b, unsigned long c) " 

re.findall(p, test_str) 

enter image description here

+0

어떻게 파이썬으로 작성합니까? –

+1

@UrsaMajor 나는 코드를 부여했습니다. – vks

1

당신은 re.findall을 사용할 수 있습니다 : 당신이 말을하려는 경우

>>> string = "int funt (char* dst, char* src, int length); void bar (int a, short b, unsigned long c) " 
>>> l= re.findall(r'\((.*?)\)',string) 
['char* dst, char* src, int length', 'int a, short b, unsigned long c'] 

을 당신은 그들을 split 수 있습니다

>>> [i.split() for i in l] 
[['char*', 'dst,', 'char*', 'src,', 'int', 'length'], ['int', 'a,', 'short', 'b,', 'unsigned', 'long', 'c']] 
+0

이름 'l'이 정의되지 않았습니다. –

+1

@UrsaMajor 오 ...보고 싶습니다. 're.findall'의 결과를 l에 할당해야합니다. 대답을 편집하십시오. – Kasramvd

+0

우수. 고맙습니다. –

관련 문제