Python/PyParsing:setResultsName 遇到困难
我认为我在调用 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
来自 IDLE:
>>> myparser import *
>>> statement.parseString("CS 2110")
(['CS', 2110], {'Dept Code': [('CS', 0)], 'Course Number': [(2110, 1)]})
我希望的输出:
>>> myparser import *
>>> statement.parseString("CS 2110")
(['CS', 2110], {'Course': ['CS', 2110], 'Dept Code': [('CS', 0)], 'Course Number': [(2110, 1)]})
setResultsName()
仅适用于终端吗?
I think I'm making a mistake in how I call 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
From IDLE:
>>> myparser import *
>>> statement.parseString("CS 2110")
(['CS', 2110], {'Dept Code': [('CS', 0)], 'Course Number': [(2110, 1)]})
The output I hope for:
>>> myparser import *
>>> statement.parseString("CS 2110")
(['CS', 2110], {'Course': ['CS', 2110], 'Dept Code': [('CS', 0)], 'Course Number': [(2110, 1)]})
Does setResultsName()
only work for terminals?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您将
course
的定义更改为您会得到以下行为:
这并不完全是您想要的
repr
,但它是否足够?请注意,来自文档:
因此,
course.setResultsName("Course")
不起作用,因为它不会影响course
。相反,您必须说course=course.setResultsName("Course")
。这是我上面所做的另一种方法。If you change the definition of
course
toyou get the following behavior:
That's not exactly the
repr
you wanted, but does it suffice?Note, from the docs:
So
course.setResultsName("Course")
does not work because it doesn't affectcourse
. You would instead have to saycourse=course.setResultsName("Course")
. That's an alternative way to do what I did above.