我知道这是一个基本问题,但我在解析某些文字方面遇到了困难。
那么系统将如何运作,让我们采取以下示例:
> set title "Hello world"
我应该得到:
["set title", "Hello world"]
问题是,我需要拆分字符串,以便在我输入时,例如:
> plot("data.txt");
应该给我:
["plot", "data.txt"]
我尝试了以下内容:
While True:
command = raw_input(">");
parse = command.split("' '");
if(parse[0] == "set title"):
title = parse[1];
但这不起作用,甚至不会认识到我正在进入"设置标题"
有什么想法吗?
答案 0 :(得分:1)
您不需要split
。您需要re
:
import re
def parse(command):
regex = r'(.*) "(.*)"'
items = list(re.match(regex, command).groups())
return items
if __name__ == '__main__':
command = 'set title "Hello world"'
print parse(command)
返回
['set title', 'Hello world']
答案 1 :(得分:0)
要按空格分割字符串,您需要使用
parse = command.split(' ')
输入"设置标题"你会得到一个像这样的解析数组
['set', 'title']
其中parse[0] == 'set'
和parse[1] == 'title'
如果您想测试您的字符串是否以" set title"开头,请检查command
字符串本身或检查parse
的前两个索引。
答案 2 :(得分:0)
split("' '")
将拆分三个字符的单引号,空格,单引号的文字序列,它们不会出现在command
字符串中。
我认为你需要更接近这个:
command, content = command.split(" ", 1)
if command == "plot":
plot(command[1:-1])
elif command == "set":
item, content = content.split(" ", 1)
if item == "title":
title = content[1:-1]
...
注意使用第二个参数告诉split
多少次这样做; 'set title "foo"'.split(" ", 1) == ['set', 'title "foo"']
。确切地说,您实现的方式取决于您希望能够解析的事物的范围。