以复杂的方式拆分字符串?

时间:2012-05-31 22:04:10

标签: python string split

我正在制作一门基础语言。嗯,不完全是,但你会看到。现在,我做了回声和退出命令,但我需要帮助。

如果我给它一个字符串'echo'你好bob“'我希望它将它拆分,并给我一个像这样的数组[echo,Hello Bob]。现在,我有回声工作,但只有一个字。所以我可以做 - > 'echo bob',它将输出'bob'。但是,如果我做'echo hi bob',它将输出'hi'。我一直希望它能做到这一点。如果我有一个命令foo,我想做'foo'bar face“boo”并得到[foo,bar face,boo]。所以基本上我想做myArr.split('')除了引号之间的任何内容。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:4)

这是一个简单的答案:

>>> import shlex
>>> shlex.split('echo "hello bob"')
['echo', 'hello bob']

shlex是一个帮助解析类shell语言的模块。

可在此处找到文档(谢谢,JIStone):http://docs.python.org/library/shlex.html

答案 1 :(得分:1)

这是一个简单的标记器

import re

def s_ident(scanner, token): return token
def s_operator(scanner, token): return "op%s" % token
def s_float(scanner, token): return float(token)
def s_int(scanner, token): return int(token)

scanner = re.Scanner([
    (r"[a-zA-Z_]\w*", s_ident),
    (r"\d+\.\d*", s_float),
    (r"\d+", s_int),
    (r"=|\+|-|\*|/", s_operator),
    (r"\s+", None),
    ])

print scanner.scan("sum = 3*foo + 312.50 + bar")

您需要一个解析器来实际使用此lex'd内容