0

我試圖來標記以下代碼標記(樂星):拆分代碼到在Python

foo ::= 5 
bar ::= 15 
foobar ::= 20 

所以輸出:

['foo', '::=', '5', '\n', 'bar', '::=', '15', '/n', 'foobar', '::=', '20' ] 

我現在嘗試以下操作:

reTokens = re.compile(r' ') 
tokens = reTokens.split(source) 
print(tokens) 

但是,這印:

['\n', '', '', '', 'foo', '::=', '5\n', '', '', '', 'bar', '::=', '15\n', '', '', '', 'foobar', '::=', '20\n'] 

正如您所見,存在很多問題。幾個主要的問題是:

  1. 空間沒有被完全刪除
  2. 某些令牌沒有被正確分割(即「\ n」添加\ n正則表達式不解決這個問題無論是作爲本完全將其從陣列中移除)。

回答

1

你可以這樣做:

from functools import reduce 

lines = source.splitlines() 
tokens_list = [line.strip().split() for line in lines] 
tokens = reduce(lambda x,y: x + ['\n'] + y, tokens_list) 
print(tokens) 

這將分割源到它的線,記號化各行,然後讓他們一個清單,\n S IN各線之間。

+0

在Python 3中是否存在「減少」 –

+0

哦對不起,它是python 3,正確:)它是在functools下。所以你應該寫'從functools進口減少' –

+0

我在哪裏放? –