Pyparsing returns ParseException: , found '-'

59 views Asked by At

I'm trying to parse a relatively simple expression with pyparsing, but I'm getting an error that I don't understand.

Here's the parser setup. I can parse user and feature separately, but combining them is causing an exception.

from pyparsing import *

user = Group(
    Word(alphanums).setResultsName("username")
    + Word(alphanums + "-").setResultsName("host")
    + Word(alphanums + ":" + "{" + "}").setResultsName("portid")
    + Suppress("(v")
    + Word(nums + ".").setResultsName("version")
    + Suppress(")")
    + Suppress("(")
    + Word(alphanums + "-").setResultsName("server")
    + Suppress("/")
    + Word(nums).setResultsName("port")
    + Suppress(Word(nums))
    + Suppress("), start")
    + Suppress(Word(alphas))
    + Word(nums).setResultsName("month")
    + Suppress("/")
    + Word(nums).setResultsName("day")
    + Word(nums).setResultsName("hour")
    + Suppress(":")
    + Word(nums).setResultsName("min")
)

feature = (
    QuotedString(quote_char='"').setResultsName("name")
    + Word(alphanums + ".").setResultsName("version")
    + Suppress(", vendor:")
    + Word(alphas).setResultsName("vendor")
    + Suppress(", expiry: ")
    + Word(nums)
    + Suppress("-")
    + Word(alphas)
    + Suppress("-")
    + Word(nums)
    + Suppress("vendor_string: ")
    + Word(alphanums + ":")
    + Word(alphas).setResultsName("type")
)

This works as expected:

features_str = """
  "ABC_123" v12.0, vendor: asdfcd, expiry: 15-jan-2119
  vendor_string: UHD:PERM
  floating license
"""
feature.parse_string(features_str)

This works as expected:

users_str = """
    auser2 CVBNMZ-3XGXJR3 0:0 (v17.000) (ZZ-XXX-NONAME/27077 1217), start Fri 11/10 4:55
    auser1 ABCDEF-RBMQN61 none (v17.000) (ZZ-YYY-NONAME/27077 2394), start Fri 11/10 9:46    
"""

OneOrMore(user).parse_string(users_str)

But if I try to parse the combined strings:

features_and_users = features_str + users_str

expr = feature + OneOrMore(user)
expr.parse_string(features_and_users)

I get a ParseException: , found '-' (at char 119), (line:6, col:18).

0

There are 0 answers