2017-09-25 5 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

正規表現を使用して、特定のテキスト(この場合は「ヘッダー」)が存在するかどうかを確認します。存在する場合は、抽出しないデータ部分を抽出します。例えば

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

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

すべての上記の3つのテキスト値は、単語「ヘッド」である位置によらず、すなわち、このコードワード「ヘッド」は、テキスト中に存在するか否かをチェックするにはそれに応じて処理します

これが役に立ちます。

+0

はい、私はその考えを理解しています。しかし、私はそれをどのようにしなければならないのですか? – Djo

関連する問題