标签: pyparsing

pyparsing错误

在pyparsing中我遇到了这个错误

from pyparsing import Word,alphas,nums,Or,Regex,StringEnd
ws = Regex('\s*')
dot = "."
w = Word(alphas) + (ws | dot) + StringEnd()
w.leaveWhitespace()
w.parseString('AMIT.')
Run Code Online (Sandbox Code Playgroud)

返回以下错误:

ParseException: Expected end of text (at char 4), (line:1, col:5)
Run Code Online (Sandbox Code Playgroud)

python parsing pyparsing

4
推荐指数
1
解决办法
2810
查看次数

与pyparsing匹配的简单嵌套表达式

我想匹配一个看起来像这样的表达式:

(<some value with spaces and m$1124any crazy signs> (<more values>) <even more>)
Run Code Online (Sandbox Code Playgroud)

我只是想沿着圆括号 () 拆分这些值。目前,我可以减少 s-expression 示例中的 pyparsing 开销,这非常广泛且无法理解(恕我直言)。

我尽可能使用该nestedExpr语句,将其减少为一行:

import pyparsing as pp
parser = pp.nestedExpr(opener='(', closer=')')
print parser.parseString(example, parseAll=True).asList()
Run Code Online (Sandbox Code Playgroud)

结果似乎也被分割在空白处,这是我不想要的:

  skewed_output = [['<some',
  'value',
  'with',
  'spaces',
  'and',
  'm$1124any',
  'crazy',
  'signs>',
  ['<more', 'values>'],
  '<even',
  'more>']]
expected_output = [['<some value with spaces and m$1124any crazy signs>' 
['<more values>'], '<even more>']]
best_output = [['some value with spaces and m$1124any crazy signs' 
['more vlaues'], 'even more']]
Run Code Online (Sandbox Code Playgroud)

或者,我很乐意指出我可以阅读一些 …

python parsing pyparsing

4
推荐指数
1
解决办法
1635
查看次数

python 库 pyparsing 中的未知版本

我正在尝试在我的计算机上安装airnotifier,但收到此错误

我的python版本是3.6

PS C:\airnotifier> python app.py
Traceback (most recent call last):
  File "app.py", line 32, in <module>
    from pushservices.bootstrap import init_messaging_agents
  File "C:\airnotifier\pushservices\bootstrap.py", line 4, in <module>
    from .fcm import FCMClient
  File "C:\airnotifier\pushservices\fcm.py", line 5, in <module>
    from oauth2client.service_account import ServiceAccountCredentials
  File "C:\Users\smacrsadmin\AppData\Local\Programs\Python\Python36\lib\site-packages\oauth2client\service_account.py", line 25, in <module>
    from oauth2client import client
  File "C:\Users\smacrsadmin\AppData\Local\Programs\Python\Python36\lib\site-packages\oauth2client\client.py", line 39, in <module>
    from oauth2client import transport
  File "C:\Users\smacrsadmin\AppData\Local\Programs\Python\Python36\lib\site-packages\oauth2client\transport.py", line 17, in <module>
    import httplib2
  File "C:\Users\smacrsadmin\AppData\Local\Programs\Python\Python36\lib\site-packages\httplib2\__init__.py", line 52, in <module>
    from . import auth
  File …
Run Code Online (Sandbox Code Playgroud)

python pyparsing

4
推荐指数
1
解决办法
8581
查看次数

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
Run Code Online (Sandbox Code Playgroud)

来自IDLE:

>>> myparser import *
>>> statement.parseString("CS 2110")
(['CS', 2110], {'Dept Code': [('CS', 0)], 'Course Number': [(2110, 1)]})
Run Code Online (Sandbox Code Playgroud)

我希望的输出:

>>> myparser import *
>>> statement.parseString("CS 2110")
(['CS', 2110], {'Course': ['CS', 2110], 'Dept Code': [('CS', 0)], 'Course Number': [(2110, 1)]})
Run Code Online (Sandbox Code Playgroud)

难道setResultsName()只为终端的工作吗?

python nlp pyparsing

3
推荐指数
1
解决办法
1029
查看次数

操作员的Pyparsing问题

我做了一个带有pyparsing的语法,我有一个问题.语法试图解析搜索查询(使用运算符优先级,括号等),我需要空格像和运算符一样工作.

例如,这工作正常:

(word and word) or word
Run Code Online (Sandbox Code Playgroud)

但这失败了:

(word word) or word
Run Code Online (Sandbox Code Playgroud)

我希望第二个查询像第一个查询一样工作.

我的实际语法是:

WWORD = printables.replace("(", "").replace(")", "")
QUOTED = quotedString.setParseAction(removeQuotes)

OAND = CaselessLiteral("and")
OOR = CaselessLiteral("or")
ONOT = "-"

TERM = (QUOTED | WWORD)

EXPRESSION = operatorPrecedence(TERM,
    [
        (ONOT, 1, opAssoc.RIGHT),
        (OAND, 2, opAssoc.LEFT),
        (OOR, 2, opAssoc.LEFT)
    ])

STRING = OneOrMore(EXPRESSION) + StringEnd()
Run Code Online (Sandbox Code Playgroud)

python pyparsing

3
推荐指数
1
解决办法
812
查看次数

pyparsing问题

现在我刚刚开始使用pyparsing解析简单的后缀表达式.目前,我得到了这个:

from pyparsing import *
integer = Word(nums)
op = Word("+-*/^", max=1)
space = Word(" ")
expr = Word(nums)+space+Word(nums)+space+op
parsed = expr.parseString("3 4 *")
print parsed
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,它会打印:

Traceback (most recent call last):
  File "star_parse.py", line 6, in <module>
    parsed = expr.parseString("3 4 *")
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/pyparsing-1.5.5-py2.6.egg/pyparsing.py", line 1100, in parseString
    raise exc
pyparsing.ParseException: Expected W:( ) (at char 2), (line:1, col:3)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python parsing expression pyparsing postfix-operator

3
推荐指数
1
解决办法
515
查看次数

词典和pyparsing列表

我正在使用pyparsing来构建附加到列表的字典.当我这样做时,字典被包含在一个额外的列表中,并且还附加了一个空的字典.我不知道如何解决这个问题.我想要的是[{},{},{}].我得到了[([{}],{})]为什么getDict的代码给了我想要的东西而不是getDictParse?

#! /usr/bin/env python
from pyparsing import Literal, NotAny, Word, printables, Optional, Each, Combine, delimitedList, printables, alphanums, nums, White, OneOrMore, Group

noParseList = []
parseList   = []

def getDict():
    return {'duck':'moose','cow':'ewe'}

def getDictParse(str, loc, toks):
    return {'duck2':toks[0],'cow2':'ewe'}

parser = Word(alphanums)
parser.setParseAction(getDictParse)
parseList.append(parser.parseString("monkey"))

noParseList.append(getDict())

print noParseList
print parseList
Run Code Online (Sandbox Code Playgroud)

输出:

[{'cow': 'ewe', 'duck': 'moose'}]
[([{'cow2': 'ewe', 'duck2': 'monkey'}], {})]
Run Code Online (Sandbox Code Playgroud)

python pyparsing

3
推荐指数
1
解决办法
1627
查看次数

pyparsing以最常见的形式解析python函数调用

我想使用优秀的pyparsing包以最常见的形式解析python函数调用.我读了一篇在这里有点用处但仍然不够通用的帖子.

我想解析以下表达式:

f(arg1,arg2,arg3,...,kw1=var1,kw2=var2,kw3=var3,...)
Run Code Online (Sandbox Code Playgroud)

哪里

  1. arg1,arg2,arg3 ...是任何类型的有效python对象(整数,实数,列表,字典,函数,变量名......)
  2. kw1,kw2,kw3 ...是有效的python关键字名称
  3. var1,var2,var3是有效的python对象

我想知道是否可以为这样的通用模板定义语法.我或许要求太多了......你有什么想法吗?

非常感谢您的帮助

埃里克

python pyparsing

3
推荐指数
1
解决办法
1425
查看次数

解析Lisp输入到python的问题

我试图将lisp输入解析为python列表.但是当我解析输入时,我得到了字符串列表,但我希望将单个元素作为int.

示例:当我解析以下输入时:"(2 (10 (5 11))) (5 6) (4)" 输出:[[['2'], ['10', '5']], [['5'], ['6']], [['4']]]

我使用:[[map(int, x) for x in lst] for lst in test]转换字符串,int但此函数只解析2级嵌套列表.但如果我有一个超过2的嵌套列表,我应该如何使用它来解析?

我试过pyparsing但我没理解它.

lisp python pyparsing

3
推荐指数
1
解决办法
311
查看次数

不能使用setParseAction()方法来pickle Pyparsing表达式.需要多处理

我的原始问题是我正在尝试执行以下操作:

def submit_decoder_process(decoder, input_line):
    decoder.process_line(input_line)
    return decoder

self.pool = Pool(processes=num_of_processes)
self.pool.apply_async(submit_decoder_process, [decoder, input_line]).get()
Run Code Online (Sandbox Code Playgroud)

解码器在这里有点介绍,但重要的是解码器是一个用调用setParseAction()的PyParsing表达式初始化的对象.这会使多处理使用的pickle失败,这反过来又失败了上面的代码.

现在,这是我已经孤立和简化的pickle/PyParsing问题.由于pickle失败,以下代码会产生错误消息.

import pickle
from pyparsing import *

def my_pa_func():
    pass

pickle.dumps(Word(nums).setParseAction(my_pa_func))
Run Code Online (Sandbox Code Playgroud)

错误信息:

pickle.PicklingError: Can't pickle <function wrapper at 0x00000000026534A8>: it's not found as pyparsing.wrapper
Run Code Online (Sandbox Code Playgroud)

现在,如果你删除调用.setParseAction(my_pa_func),它将没有问题:

pickle.dumps(Word(nums))
Run Code Online (Sandbox Code Playgroud)

我怎么能绕过它呢?多处理使用泡菜,所以我猜不出它.据说使用dill的pathos包不够成熟,至少,我在Windows-64bit上安装它时遇到问题.我真的在这里摸不着头脑.

python pickle pyparsing python-multithreading python-multiprocessing

3
推荐指数
1
解决办法
751
查看次数