2014-01-29 49 views
0

我有以下輸入:的Python:拆分字符串多個字符

"auth-server $na me$ $1n ame$ [position [$pr io$]] xxxx [match-fqdn [[$fq dn$] [all]]]" 

我需要將它們存儲在一個列表與$<>作爲分隔符。

預期輸出:

['auth-server', '$na me$', '$1n ame$', '[position', '[$pr io$]]', 'xxxx', '[match-fqdn', '[[$fq dn$]', '[all]]]'] 

我怎樣才能做到這一點?

+0

對不起輸入是: 「auth服務器$ 1N AME $ [位置[] XXXX [匹配FQDN [[] [全部]]]」 – Krishna

+1

您可以隨時編輯帖子,這比添加評論要好。將行縮進四個空格以關閉該行的格式。 –

+0

我編輯了你的帖子來爲你設置代碼格式。如果我失去了任何意義,請不要猶豫再次修改您的帖子來修復它。 – thegrinner

回答

3

你可以做的是將它分割在空格中,然後遍歷每個子字符串並檢查它是否以特殊分隔符之一開始。如果是這樣,請啓動一個新字符串並追加後續字符串,直至到達最終分隔符。然後刪除這些子字符串,並用新字符串替換它們。

+0

你的意思是:words = a.split()?然後再遍歷列表中的分隔符? 其中a =「auth-server $ na me $ $ 1n ame $ [position [$ pr io $]] xxxx [match-fqdn [[$ fq dn $] [all]]]」 對不對? – Krishna

+0

遍歷將在「單詞」列表上。創建新的特定分隔子字符串時,您需要使用第二個列表(「words2」)和一個臨時字符串。 – wbest

1

我想你想要的是

import re 
re.split(r"(?<=\]) | (?=\$|\[)", "auth-server $na me$ $1n ame$ [position [$pr io$]] xxxx [match-fqdn [[$fq dn$] [all]]]") 

這就產生

['auth-server', '$na me$', '$1n ame$', '[position', '[$pr io$]]', 'xxxx', '[match-fqdn', '[[$fq dn$]', '[all]]]'] 

不過請注意,這不是正是你所描述的,但你的例子匹配。看起來你希望在空格前面加上]或後面跟着$[

+0

謝謝,我想要這樣的東西。 – Krishna

0

不太一個完整的答案,但我用regexp搜索...

a = "auth-server $na me$ $1n ame$ [position [$pr io$]] xxxx [match-fqdn [[$fq dn$] [all]]]" 
m = re.search('\$.*\$', a) 

a.split()結合這一點,我們可以算一算......

1

嘗試re.split和正則表達式誰讓別人啼血

import re 
print re.split(r'(\$[^\$]+\$|\[\S+([^\]]+\]\])?|[-0-9a-zA-Z]+)',"auth-server $na me$ $1n ame$ [position [$pr io$]] xxxx [match-fqdn [[$fq dn$] [all]]]") 
1

考慮使用pyparsing

from pyparsing import * 
enclosed = Forward() 
nestedBrackets = nestedExpr('[', ']') 
enclosed << (Combine(Group(Optional('$') + Word(alphas) + Optional('$'))) | nestedBrackets) 
print enclosed.parseString(data).asList() 

輸出:

[['auth-server', '$na', 'me$', '$1n', 'ame$', ['position', ['$pr', 'io$']], 'xxxx', 
['match-fqdn', [['$fq', 'dn$'], ['all']]]]]