2014-07-25 1 views
4

을 대한 파싱하는 동안 나는 다음과 같은 표현이 있습니다변경 문자열 내 대한 파싱 코드에서

내가 =와 구별 할 수 있도록, 바 EXP2에서 foo는 변경할
exp1 = Literal("foo") + Suppress(Literal("=")) + Word(alphanums+'_-') 
exp2 = Literal("foo") + Suppress(Literal("!=")) + Word(alphanums+'_-') 
exp = Optional(exp1) & Optional(exp2) 

= 구문 분석 된 데이터!. 이것이 가능한가?

+0

만약 당신이 단지 상수 리터럴 문자열 표현을 바꾸려면

['booA', 'B'] 

replaceWith를 사용 너는 사람과 구별하기를 원해. n'='과'! ='이면 왜 파싱 된 결과에서 그 토큰을'제지 하시겠습니까? –

답변

5

Karl Knechtel의 설명이 유효하지만 일치하는 토큰을 변경하려는 경우 구문 분석 작업에서이를 수행 할 수 있습니다.

def changeText(s,l,t): 
    return "boo" + t[0] 

expr = Literal("A").setParseAction(changeText) + "B" 
print expr.parseString("A B").asList() 

인쇄됩니다 :

expr = Literal("A").setParseAction(replaceWith("Z")) + "B" 
print expr.parseString("A B").asList() 

인쇄 :

['Z', 'B']