Je pense que je fais une erreur dans la façon dont j'appelle setResultsName()
:Python/pyparsing: Difficulté avec setResultsName
from pyparsing import *
DEPT_CODE = Regex(r'[A-Z]{2,}').setResultsName("Dept Code")
COURSE_NUMBER = Regex(r'[0-9]{4}').setResultsName("Course Number")
COURSE_NUMBER.setParseAction(lambda s, l, toks : int(toks[0]))
course = DEPT_CODE + COURSE_NUMBER
course.setResultsName("course")
statement = course
De IDLE:
>>> myparser import *
>>> statement.parseString("CS 2110")
(['CS', 2110], {'Dept Code': [('CS', 0)], 'Course Number': [(2110, 1)]})
La sortie je l'espère:
>>> myparser import *
>>> statement.parseString("CS 2110")
(['CS', 2110], {'Course': ['CS', 2110], 'Dept Code': [('CS', 0)], 'Course Number': [(2110, 1)]})
Est-ce que setResultsName()
ne fonctionne que pour les terminaux?
Que fait 'repr()'? –
En outre, il semble que 'setResultsName()' renvoie une copie, mais 'setParseAction()' ne pas - pourquoi l'incohérence? Ou est-ce que je me trompe? –
@Rosarch: 'repr()' retourne une représentation sous forme de chaîne de l'objet. Il donne souvent une vue plus complète des données à l'intérieur d'un objet que 'str()'. Je pense que vous avez raison: 'setParseAction' renvoie' self', tandis que 'setResultName' renvoie une copie. Je ne suis pas assez éclairé pour expliquer pourquoi c'est ainsi. – unutbu