2017-12-12 14 views
1

초보자 용 질문에 불편을 끼쳐 드려 죄송합니다. 그러나이 문제로 인해 많은 어려움이있었습니다. 나는 첫 번째 부분은 '그룹'구문 분석 할 수pyparsing 및 nestedExpr을 사용하여 시작점을 설정할 때 문제가 발생했습니다.

groups { 
...some nested info... 
} 
some text.... 
system { 
...some nested info... 
} 
chassis { 
...some nested info... 
} 

이제 사용하여 대한 파싱 및 nestedExpr 나는 완벽 목록에서 목록의 집합을 얻을 :

내가 좋아하는 뭔가를 보이는 라우터 설정 입력 파일이 , 그러나 나는 '시스템'이나 '섀시'로 계속할 수 없다.

이상적으로, 나는 '섀시'에서 시작하여 그 섹션에서 목록의 목록 만 얻고 싶습니다.

pyparsing 및 nestedExpr을 사용하여 전체 파일을 수행하거나 특정 지점에서 시작하는 방법이 있습니까?

내 현재 코드는 나는 그것이 '섀시'에서 시작 얻을 어떻게 이상적으로, 매우 간단하다 :

from pyparsing import *  

with open('newfile.txt') as routerFile: 
    test = routerFile.read() 

    expr = Word(alphas) + nestedExpr('{','}') 
    print expr.parseString(test) 
+0

''chassis ''은''system ''에 중첩되어 있습니까? 또는 시스템의 중첩 된 정보 뒤에''} ''이어야합니까? – PaulMcG

+0

그래, 섀시와 시스템은 분리되어있어 이제는 고쳐 주셔서 고마워. –

답변

0

더 큰 텍스트의 선택 비트를 구문 분석 할 때 당신은 몇 가지 옵션이 있습니다 생각합니다.

하나는 파이핑의 SkipTo 클래스를 사용하는 것입니다.

from pyparsing import Word, SkipTo 

text = "AAA stuff I dont care about BBB more junk" 

part1 = Word("A") 
part2 = Word("B") 
parser = part1 + SkipTo(part2) + part2 

print(parser.parseString(text).asList()) 

인쇄

['AAA', 'stuff I dont care about ', 'BBB'] 

당신이 정말 물건을 개입, SkipTo(part2).suppress()를 사용하지 않으려면

.

텍스트를 선택하는 또 다른 방법은 this answer에 설명 된대로 parseString 대신 scanString 또는 searchString을 사용하는 것입니다.