2013-06-14 5 views
0

최근에 HTML을 생성하는 데 사용되는 파일이 주어졌습니다. 메뉴 템플릿에는 정렬 및 시간 제약으로 인해 파이썬이 있습니다. 프로토 타입 작동하지만 무차별 적이며이 경우에만 작동합니다.flattly 작성한 중첩 텍스트 템플릿을 N 레벨 용 중첩 데이터 구조로 구문 분석

더 나은 방법이 있어야하지만 내 Google 검색이 도움이되지 않았다는 것을 알고 있습니다. 다음은 템플릿 파일 내가이 구조에이 무력 관리했습니다

[text](link) 
[text](link) 
>[text](link) 
>[text](link) 
>>[text](link) 
>>[text](link) 
>>[text](link) 
[text](link) 
>[text](link) 

처럼 (hopefull이 누락되지] 또는 [곳 XD)

[ 
    [ [text](link), [] ], 
    [ [text](link), [ 
     [ [text](link), [] ], 
     [ [text](link), [ 
      [ [text](link), [] ], 
      [ [text](link), [] ], 
      [ [text](link), [] ], 
     ] ], 
    ], 
    [ [text](link), [ 
     [ [text](link), [] ], 
    ] ], 
] 

하지만 기본적으로 이런 짓을 한거야 루트, 부모를 추적하고 행의 시작 부분에서 "", ">"또는 ">>"을 확인한 다음 ""에 대해 루트에 [text, []]를 추가하고 ">" ">>"에 대한 루트 [parent]. 문제는 N *>으로 해결하고 진행 방법이나 검색 할 항목을 모르겠습니다. 파이썬에서 이의 대답은 어떤 언어로 할 수있다, 파이썬은 빠른 그래서이 작품을 함께

menu = [] 
f = open('template_file', 'r') 
root = 0 
parent = 0 
for line in f: 
    line = line.strip() 
    m = re.match('(.*)(\[.*)', line) 
    if m: 
     prefix = m.group(1) 
     link = m.group(2) 
     if prefix == "": 
      menu.append([link, []]) 
      root += 1 
      parent = 0 
     elif prefix == ">": 
      menu[root - 1][1].append([link, []]) 
      parent += 1 
     elif prefix == ">>": 
      menu[root - 1][1][parent - 1][1].append([link, []]) 

을 던져 이었지만, 내가 찾을 수 있도록 검색해야 모르겠어요 끔찍 이러한 템플릿 파일을 이러한 구조로 파싱하는 더 좋은 방법은 필요한 HTML을 추출하는 것입니다. 나는 문제를 더 줄이기를 원한다.

매우 감사드립니다.

+0

(file.txt를 위와 같이 템플릿 파일입니다). – Melignus

답변

0

각 ">"을 탭으로 바꿉니다. 출력은 당신의 무차별 대항력만큼이나 정확합니다. 요즘 하스켈 만지작 봤는데이 쉽게 하스켈 해결할 문제 같은 느낌,하지만 난 아직 준비가 덜 해요

test = open("file.txt", "r") 

for line in test: 
    print line.replace(">", "\t") 
    #print line