2011-12-14 7 views
8

pyparsingを使用するには、私の最初の試みであると私は、このサンプルラインをフィルタリングする方法を をお願いしたいと思います:pyparsing例

survey = '''GPS,PN1,LA52.125133215643,LN21.031048525561,EL116.898812''' 

のような出力を得るために:1,52.125133215643,21.031048525561,116.898812

一般に、私はこの論理を理解することに問題がありますので、この の例の助けを歓迎します。おかげ

答えて

19

は、あなたがこのような何かを始めることができます:

from pyparsing import * 

survey = '''GPS,PN1,LA52.125133215643,LN21.031048525561,EL116.898812''' 

number = Word(nums+'.').setParseAction(lambda t: float(t[0])) 
separator = Suppress(',') 
latitude = Suppress('LA') + number 
longitude = Suppress('LN') + number 
elevation = Suppress('EL') + number 

line = (Suppress('GPS,PN1,') 
     + latitude 
     + separator 
     + longitude 
     + separator 
     + elevation) 

print line.parseString(survey) 

スクリプトの出力は次のようになります。

[52.125133215643, 21.031048525561, 116.898812] 

編集:またleplを検討する必要があります、だと類似ライブラリですかなりうまく文書化されています。上記と同等のスクリプトは、

from lepl import * 

survey = '''GPS,PN1,LA52.125133215643,LN21.031048525561,EL116.898812''' 

number = Real() >> float 

with Separator(~Literal(',')): 
    latitude = ~Literal('LA') + number 
    longitude = ~Literal('LN') + number 
    elevation = ~Literal('EL') + number 

    line = (~Literal('GPS') 
      & ~Literal('PN1') 
      & latitude 
      & longitude 
      & elevation) 

print line.parse(survey) 
+0

ありがとうございます。 – daikini

+0

確かに、このモジュールをチェックします – daikini

+0

リストに '1'をもたせたいのですが? floatに型キャストを使用しているので、これは '1.0'を返します。これをちょうどintにキャストする方法はありますか? –

関連する問題