пример разбора - PullRequest
       6

пример разбора

8 голосов
/ 14 декабря 2011

Это моя первая попытка использовать pyparsing, и я хотел бы спросить Как отфильтровать эту строку образца:

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

чтобы получить вывод как: 1,52.125133215643,21.031048525561,116.898812

Вообще у меня проблемы с пониманием логики разбора, поэтому любая помощь с этим пример будет оценен. Спасибо

1 Ответ

22 голосов
/ 14 декабря 2011

Вы можете начать с чего-то вроде этого:

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)
...