我希望能够从一段文本中提取字母的类型和数量,其中字母可以按任何顺序排列。我正在进行其他一些解析,但这一点让我难住了!
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”一样混合,因为在您的所有测试用例中,字母总是组合在一起。如果字母are总是组合在一起,您可以使用以下 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 的重复。解析操作负责将解析后的标记转换为(字符,计数)元组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)