【发布时间】:2011-09-26 19:55:17
【问题描述】:
我正在尝试使用 pyparsing 解析文本。我的功能如下图所示。首先,我构建了一个列表,其中包含我的字典中的所有术语(我网站中常用术语的字典)。然后我将我的语法设置为这个常用单词列表。然后我用语法构造 ZeroOrMore 对象。最后,我解析字符串,我应该得到在我的字符串中找到的匹配项。但是,它会引发 ParseException,而不是抱怨预期文本结束。
def map_dict_words(self, pbody):
dict_terms = [term.term for term in Dictionary.objects()]
look_for_these = oneOf(dict_terms, caseless=True).setResultsName("dict_words")
parseobj = ZeroOrMore(look_for_these)
matches = parseobj.parseString(pbody, parseAll=True)
print matches
根据 pyparsing 主页http://pyparsing-public.wikispaces.com/FAQs 中的常见问题解答,如果我希望解析器解析整个字符串,我应该将 StringEnd() 放入我的语法中,或者使用可选的 arg parseAll=True。如果我从我的代码中删除 parseAll=True 它可以工作,但它不会解析整个字符串。
有什么想法吗?
【问题讨论】:
-
>> “但是,它会引发 ParseException,而不是抱怨预期文本结束。” - 正如您在 pyparsing 常见问题解答中看到的那样 - 它引发 exaclty ParseException 抱怨文本结束是预期的。这就是它的运作方式——这是他的行为。不要以为找到INVALID语法后就可以让pyparsing解析所有文本。