python - Pyparsing - token 的顺序不可预测

标签 python pyparsing

我希望能够从一段文本中提取出字母的类型和数量,其中字母可以按任何顺序排列。我正在进行其他一些解析工作,但这一点让我感到难过!

input -> result
"abc" -> [['a',1], ['b',1],['c',1]]
"bbbc" -> [['b',3],['c',1]]
"cccaa" -> [['a',2],['c',3]]

我可以对每个可能的字母使用搜索或扫描并重复,但有一种干净的方法吗?

据我所知:

from pyparsing import *


def handleStuff(string, location, tokens):

        return [tokens[0][0], len(tokens[0])]


stype = Word("abc").setParseAction(handleStuff)
section =  ZeroOrMore(stype("stype"))


print section.parseString("abc").dump()
print section.parseString("aabcc").dump()
print section.parseString("bbaaa").dump()

最佳答案

从你的描述中我不清楚输入字符是否可以像“ababc”那样混合,因为在你所有的测试用例中,字母总是组合在一起。如果字母 总是组合在一起,您可以使用此 pyparsing 代码:

def makeExpr(ch):
    expr = Word(ch).setParseAction(lambda tokens: [ch,len(tokens[0])])
    return expr

expr = Each([Optional(makeExpr(ch)) for ch in "abc"])

for t in tests:
    print t,expr.parseString(t).asList()

Each 结构负责乱序匹配,而 Word(ch) 处理 1 对 n 的重复。解析操作负责将解析的标记转换为(字符,计数)元组。

关于python - Pyparsing - token 的顺序不可预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2134416/

相关文章:

python - 多个查询与手动排序一个大型查询 (AppEngine NDB)

python - 如何保存从 Python Selenium ChromeDriver 在 Chrome 中打开的嵌入式 PDF

python - 使用 pyparsing (latex) 解析嵌套组(带引号的字符串)

python - PyParsing 和嵌套括号 : unexpected EOF error

python - pyparsing 中嵌套结构的技巧

python - 调试 Pyparsing 语法

python - 导入错误 : No module named pandas

python - 无法从Python函数内部访问全局变量

python - Cythonized pyparser 无法正常工作,函数的参数计数错误

python - 覆盖保存方法迫使我在管理中保存两次