首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ParseException:预期文本结束

ParseException:预期文本结束
EN

Stack Overflow用户
提问于 2011-09-27 03:55:18
回答 2查看 5.6K关注 0票数 2

我正在尝试使用pyparsing来解析文本。我的函数如下所示。首先,我构建了一个包含我的字典(我的网站中常用术语的字典)中所有术语的列表。然后我将我的语法设置为常用单词的列表。然后,我使用语法构造ZeroOrMore对象。最后,我解析字符串,并在字符串中找到匹配项。然而,它抛出一个ParseException,而不是抱怨应该是文本的结尾。

代码语言:javascript
复制
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,它可以工作,但不能解析整个字符串。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-27 04:24:07

可以将pyparsing看作更高级的正则表达式。当您向它传递parseAll=True时,它期望匹配整个字符串,将每个字节限定为语法的某一部分。但是,您的语法只提到了字符串中将出现的一些单词。你必须以某种方式解释剩下的部分。

换句话说,假设流行词是"parrot“、”气垫船“、"eels”和“峡湾”,您已经构建了以下正则表达式的等价物:

代码语言:javascript
复制
/^(?P<dict_words>eels|fjords|hovercraft|parrot)*$/
票数 4
EN

Stack Overflow用户

发布于 2011-09-27 05:53:22

您可能更感兴趣的是使用scanStringsearchString,而不是parseString。与parseString不同,这些函数在输入中快速查找匹配项,而不是要求输入字符串中的所有内容都完全匹配。scanString返回一个生成器,因此对于较大的输入文本,将在找到匹配项时给出它们:

代码语言:javascript
复制
for toks,start,end in look_for_these.scanString(pbody):
    print toks[0], start, end

searchString只是scanString的一个简单包装器(去掉了开始和结束位置):

代码语言:javascript
复制
for t in look_for_these.searchString(pbody):
    print t[0]
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7560583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档