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