2012-03-10 4 views
0

몇 가지 간단한 기능은 파이썬에서 호출됩니다파이썬 : 분할 여기에 함수와 인수

 
foo(arg1, arg2, arg3) 
func1() 

는 유효한 함수 호출 가정합니다.

파일을 구문 분석하는 동안이 행을 읽는다고 가정합니다.

함수 이름과 인수를 두 개의 요소가있는 목록으로 구분하는 가장 깨끗한 방법은 무엇입니까? 첫 번째는 함수 이름의 문자열이고 두 번째는 인수의 문자열입니까?

원하는 결과는 : 나는 현재 문자열을 사용하고

 
["foo", "arg, arg2, arg3"] 
["func1", ""] 

는 "("왼쪽과의 첫 번째 인스턴스에서 ")"오른쪽에서 단지를 스 플라이 싱 첫 번째 인스턴스을 검색 하시나요? 문자열을 인덱스로 지정했는데 문제에 어떻게 접근하고 싶지 않습니다.

답변

2

현재 정규 표현식을 사용하여 비슷한 작업을하고 있습니다. 내 코드를 사례에 적용하면 다음은 제공 한 예제와 함께 작동합니다.

import re 

def explode(s): 
    pattern = r'(\w[\w\d_]*)\((.*)\)$' 
    match = re.match(pattern, s) 
    if match: 
     return list(match.groups()) 
    else: 
     return [] 
+0

아, 멋지다. 중괄호로 입력을 처리한다. 괄호 일치는 어떻게합니까? – MxyL

+2

그렇지 않습니다. 그것은 라인의 마지막 괄호를 선택한다는 점에서 현재 구현과 동일합니다. – Amber

+0

아, 알았어. – MxyL

2

파이썬에서 파이썬 파일을 구문 분석하는 경우 파이썬의 파서 ast (특히 ast.parse() 호출)을 사용해보십시오.

즉, 현재 접근 방식은 끔찍한 것은 아니지만 (여러 줄을 스팸으로 보내는 함수 호출은 중단되지만). 앞에서 언급 한 전체 구문 분석기에 미치지 못하는 접근법은 거의 없습니다. 예를 들어 일치하는 괄호를 셀 수 있으므로 중간에 줄 바꿈이 있어도 a((b,c))이 올바른 값을 반환하지만 그 코드는 잘못된 것일 수 있습니다 a((b, "c)"))과 대면 할 때 등등.

+0

제안 해 주셔서 감사합니다. 비록 실제로 파이썬 파일이 아닙니다. 나는 그 문제를 쉽게 설명하는 방법을 생각할 수 없었다. 값에서 이름을 분리하는 데 관심이있는 "이름 (값)"형식의 문자열을 다루는 일반적인 문제입니다. – MxyL

+2

그러면 나는 그것이 달려 있다고 가정합니다. 여러분의 가치는 괄호 안에 문자열과 같은 것을 허용합니까? 그렇지 않으면 문제가 훨씬 간단 해집니다. 그렇다면 문제가 발생하면 상태를 추적해야하며 언어가 사용하는 것과 동일한 구문 분석 논리를 효과적으로 다시 작성해야합니다. – Amber

+0

사용자가 의도적으로 잘못된 입력을 선택하지 않는다면 예상 할 수있는 입력 중 하나가 괄호를 포함하고있는 것처럼 보이지 않습니다. 어떤 경우에는 그 형식을 따르지 않은 것에 대해 그들에게 소리 쳐야합니다. – MxyL