pyparsing 示例

10

这是我第一次尝试使用pyparsing,我想问如何过滤这个示例行:

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

要获得类似于:1,52.125133215643,21.031048525561,116.898812 的输出。

一般来说,我不太理解pyparsing的逻辑,因此如果有关于此示例的任何帮助将不胜感激。谢谢。

1个回答

27
你可以从这样的东西开始:

您可以从以下内容开始:

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)

如果我想在列表中也有 1,该怎么办?由于它使用类型转换为浮点数,因此这将返回 1.0。有没有办法仅将它转换为整数? - Zeinab Abbasimazar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接