gpt4 book ai didi

python - 使用琶音处理空格或逗号分隔的标记列表

转载 作者:太空宇宙 更新时间:2023-11-03 15:19:58 25 4
gpt4 key购买 nike

我正在尝试编写一个琶音语法,它将提取可以用逗号或空格分隔的标记。也就是说,标记可以用逗号分隔,如下所示:

a,b,c

空白,像这样:

a b  c

或组合,如下所示:

a, b c

以上所有内容都会产生三个标记“a”“b”“c”。我还想允许空标记,这样两个逗号之间除了空格之外什么都没有的会产生一个空标记:

"a,b,, c" -> ["a", "b", "", "c"]

我已经这样定义了我的琶音语法:

def token(): return RegExMatch('[^\s,]*')
def sep(): return RegExMatch('\s*[\s,]\s*')
def token_list(): return token, ZeroOrMore(sep, token)
def tokens(): return OneOrMore(token_list), EOF
parser = ParserPython(tokens)

并实现了一个非常简单的访问者,如下所示:

class TokenVisitor(PTNodeVisitor):
def visit_token_list(self, node, children):
return list(take_nth(2, children))

和一个像这样的顶级函数:

def tokenize(string):
tree = parser.parse(string)
return visit_parse_tree(tree, TokenVisitor())

这在这些示例中都运行良好:

tokenize('a,b,c') # [u'a', u'b', u'c']
tokenize('a, b ,c') # [u'a', u'b', u'c']

但是,以下示例给出了奇怪的输出:

tokenize('a,b c') # u'a | , | b | c | '
tokenize('a,b c') # u'a | b | c | '
tokenize('a,b,,c') # [u'a', u'b', u',']

关于琶音如何处理空格和空字符串,我可能不明白。如何修复我的语法以正确解析所有这些示例?

最佳答案

Arpeggio 的解析器默认跳过空格。要覆盖此行为,请将 skipws=False 传递给 ParserPython 构造函数:

parser = ParserPython(tokens, skipws=False)

参见http://www.igordejanovic.net/Arpeggio/configuration/#white-space-handling .

关于python - 使用琶音处理空格或逗号分隔的标记列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43617650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com