2017-09-25 6 views
1

특정 헤더로 시작하는 주어진 텍스트의 내용을 추출하려고합니다.특정 헤더의 내용 추출을위한 pyparsing

Header Text_A 
blablabla 
blablablabla 

Header Text_B 
blablablablablan 
blablaa 

는이를 위해, 나는 그런 식으로 thepyparsing API를 사용했다 : 나는 위의 헤더 만 입력 텍스트가있을 때

ParserElement.defaultWhitespaceChars=(" \t") 
NL = LineEnd().suppress() 
END = StringEnd() 
header_1=Literal('Header Text_A') 
header_2=Literal('Header Text_B') 
any_header = (header_1 | header_2) 
# text isn't just anything! don't accept header line, and stop at the end of 
the input string 
text=Group(~any_header + ~END + restOfLine) 
overall_structure = ZeroOrMore(Group(any_header + 
Group(ZeroOrMore(text)))) 
overall_structure.ignore(NL) 

코드는 잘 작동합니다. 그러나 위의 머리글 예제와 다른 텍스트가있는 항목이 있으면 작동하지 않습니다. 나는 텍스트 만있는 경우, 그러나 ... 그것은 작동하지 않습니다

blablablablabla 
Header Text_A 
blablabla 
blablablabla 

Header Text_B 
blablablablablan 
blablaa 

: 예를 들어 내가 좋아하는 항목이있는 경우는 잘 작동

Header Text_A 
blablabla 
blablablabla 

Header Text_B 
blablablablablan 
blablaa 

을 ..

문제를 어떻게 해결할 수 있는지 알려주세요.

+0

특정 머리글이있는 경우 머리글 부분 만 추출하거나 데이터 부분을 추출해야합니까? 또한 좀 더 명확한 예제로 질문을 설명하십시오. 성공 사례와 실패 사례의 차이를 이해하지 못했습니다. – JKC

+0

주어진 헤더와 관련된 데이터 부분을 추출해야합니다. 다른 말로하면, 주어진 헤더를 찾으면, 그 함수는 그 헤더 다음에있는 데이터를 추출해야합니다 ... 내가 구현 한 코드는이 헤더를 가지고있는 텍스트를 가지고있을 때만이 정보를 추출합니다 한정된. 위에 정의 된 헤더를 포함하는 구조체가있는 텍스트가있는 경우에만 작동합니다. 머리글과 일치하지 않는 텍스트 앞에 텍스트가 있으면 구현 한 코드가 작동하지 않습니다. 나는 더 나쁜 영어로 유감스럽게 생각합니다. – Djo

+0

regex를 사용하여 특정 텍스트가 헤더 행에 있는지 여부를 찾습니다. 발견되면 데이터 부분을 추출하고 남겨 둡니다. – JKC

답변

0

regex를 사용하여 특정 텍스트 (이 경우 "머리글")가 있는지 여부를 확인하십시오. 존재하는 경우 추출하지 않은 데이터 부분을 추출하십시오. 위의 모든 3 개 텍스트 값에 대한

text = 'gfgfdAAA1234ZZZuHeadijjk' 
text = 'gfgfdHeadAAA1234ZZZuijjk' 
text = 'gfgfdAAAHead1234ZZZuijjk' 

m = re.search('Head', text) 
if m: 
    extract the data part 
else: 
    do not extract the data part 

단어 "헤드",이 코드는 단어 "헤드"는 텍스트 또는하지의 존재 여부를 확인합니다되는 관계없이 위치, 즉 예를 들면 다음과 같습니다

및 이에 따라 처리하십시오

희망이 도움이됩니다.

+0

네, 그 생각을 이해합니다. 그러나 pyparsing과 데이터 부분에 multilines가있을 때 어떻게 처리해야합니까? – Djo