我正在制作一门基础语言。嗯,不完全是,但你会看到。现在,我做了回声和退出命令,但我需要帮助。
如果我给它一个字符串'echo'你好bob“'我希望它将它拆分,并给我一个像这样的数组[echo,Hello Bob]。现在,我有回声工作,但只有一个字。所以我可以做 - > 'echo bob',它将输出'bob'。但是,如果我做'echo hi bob',它将输出'hi'。我一直希望它能做到这一点。如果我有一个命令foo,我想做'foo'bar face“boo”并得到[foo,bar face,boo]。所以基本上我想做myArr.split('')除了引号之间的任何内容。我怎样才能做到这一点?
答案 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内容