2014-01-29 24 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']]]]]