r"
^# define which type of Sparkplug this is
(?P<raw>
(?P<namespace>
 sp (?P<payload_type>[AB])
   v(?P<version>[0-9.]+))
/  (?P<group_id>.+?)
# Commands are for either Nodes, Devices, or State (meta)
/  (?P<command>([ND](BIRTH|DEATH|DATA|CMD)|STATE))
/  (?P<node_id>.+?)
# Device ID is optional
(/ (?P<topic>
      (?P<device_id>.+?)
   # there can be more to the topic, though there shouldn't be
   (/ (?P<remaining_topic>.+))?
 ))?)$
"
gmx