ParseException:预期的文本结束

Geo*_*ous 2 python parsing pyparsing

我试图使用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
Run Code Online (Sandbox Code Playgroud)

根据pyparsing主页http://pyparsing-public.wikispaces.com/FAQs中的FAQ,如果我希望解析器解析整个字符串,我应该将StringEnd()放入我的语法中或使用可选的arg parseAll = True.如果我从我的代码中删除parseAll = True它可以工作,但它不会解析整个字符串.

有任何想法吗?

Pau*_*McG 6

而不是parseString,你可能更感兴趣使用scanString或searchString.与此不同parseString,这些函数浏览输入以查找匹配项,而不是要求输入字符串中的所有内容完全匹配. scanString返回一个生成器,因此对于大型输入文本,将为您找到匹配项:

for toks,start,end in look_for_these.scanString(pbody):
    print toks[0], start, end
Run Code Online (Sandbox Code Playgroud)

searchString只是一个简单的包装scanString(尽管下降开始和结束位置):

for t in look_for_these.searchString(pbody):
    print t[0]
Run Code Online (Sandbox Code Playgroud)