2017-07-13 5 views
1

私はpyparsingが初めてです。私はテキストを解析しようとしていますが、実際にどのように動作しているのか理解できません。構文解析テキストusng結合が結果を返していません

from pyparsing import * 

number = Word(nums) 
yearRange = Combine(number+"-"+number) 
copyright = Literal("Copyright (C)")+yearRange+Literal("CA. All Rights Reserved.") 
copyrightCombine = Combine(copyright) 
date = Combine(Word(nums)+"/"+Word(nums)+"/"+Word(nums)) 
time = Combine(Word(nums)+":"+Word(nums)+":"+Word(nums)) 
dateTime = Combine(date+time) 
pageNumber = Suppress(Literal("PAGE"))+number 
pageLine = Word(nums)+"Copyright (C) 1986-2014 CA. All Rights Reserved."+Combine(Word(nums)+"/"+Word(nums)+"/"+Word(nums))+Combine(Word(nums)+":"+Word(nums)+":"+Word(nums))+pageNumber 
pageLine2 = number+copyright+dateTime+pageNumber 
pageLine3 = Word(nums)+copyright+Combine(Word(nums)+"/"+Word(nums)+"/"+Word(nums))+Combine(Word(nums)+":"+Word(nums)+":"+Word(nums))+pageNumber 

test = "1 Copyright (C) 1986-2014 CA. All Rights Reserved.            07/05/17 10:58:56  PAGE 1241" 
print(pageLine.searchString(test)) 
print(copyright.searchString(test)) 
print(copyrightCombine.searchString(test)) 
print(pageLine2.searchString(test)) 
print(pageLine3.searchString(test)) 

出力:

[['1', 'Copyright (C) 1986-2014 CA. All Rights Reserved.', '07/05/17', '10:58:56', '1241']] 
[['Copyright (C)', '1986-2014', 'CA. All Rights Reserved.']] 
[] 
[] 
[['1', 'Copyright (C)', '1986-2014', 'CA. All Rights Reserved.', '07/05/17', '10:58:56', '1241']] 

私はいくつかの理由でパーサcopyrightCombineはどんな結果を返すされていないためpageLine2として定義パーサーを使用します。私がCombine()を使用しようとしているときのように、構文解析によって一致が返されないようなものがあります。

答えて

1

私は方法のために発生したと考えましたCombine()が動作します。トークンの間に空白は存在しないと見なされますが、上書きすることができます。 the documentationによると

コンバイン - 指定joinStringを(デフォルトjoinString = "")を使用して、単一の文字列に一致するすべてのトークンに参加します。

+0

(コンストラクタで偽=隣接指定することで上書き することができます)間に空白はありませんし、一致するすべての トークンが隣接することを期待もされ、https://pythonhosted.org/pyparsingオンラインでドキュメントをチェックしてください1,000行以上のインラインサンプルが含まれています(あるいはPythonの 'help'コマンドを' help(Combine) 'のように使用することもできます)。 – PaulMcG

関連する問題