2012-05-31 26 views
0

我正在製作一門基礎語言。那麼,不完全是,但你會看到。現在,我確實回顯並退出命令,但我需要幫助。以複雜的方式分割字符串?

如果我給它一個字符串「echo」hello bob「'我希望它將它分開,並給我一個像[echo,Hello Bob]這樣的數組。現在,我有回聲工作,但只有一個字。所以我可以做 - >'echo bob',它會輸出'bob'。但是,如果我'回聲嗨鮑勃'它會輸出'嗨'。我總是希望它這樣做。如果我有一個命令foo,我想做'foo'bar face'boo'並獲得[foo,bar face,boo]。所以基本上我想做myArr.split(''),除了引號之間的任何東西。我怎樣才能做到這一點?

+1

你想一個標記。 – robert

+0

我相信'parser'模塊可以做到這一點,儘管我從來沒有使用它。 – Matt

+0

對不起'parser'模塊,'shlex'模塊,它提供了一種解析shell類語言的方法。 – Matt

回答

4

下面是一個簡單的答案:

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

shlex是一個模塊這有助於解析類似shell的語言。

的文檔可以在這裏找到(謝謝你,JIStone):http://docs.python.org/library/shlex.html

+0

[shlex docs link](http://docs.python.org/library/shlex.html) – jisaacstone

+0

謝謝!這將是有用的:D –

1

下面是一個簡單的tokenizer

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內容