Python:用多个字符拆分字符串

时间:2014-01-29 16:10:33

标签: 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]]]']

我该怎么做?

5 个答案:

答案 0 :(得分:3)

你可以做的是将它分割到空格上,然后遍历每个子字符串并检查它是否以一个特殊的分隔符开头。如果是,则启动一个新字符串并附加后续字符串,直到到达结束分隔符。然后删除这些子串并用新的子串替换它们。

答案 1 :(得分: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]]]']

但是请注意,这并不是您所描述的,但与您的示例相匹配的是什么。您似乎希望在]之后或$[之后拆分空格。

答案 2 :(得分: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]]]")

答案 3 :(得分: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']]]]]

答案 4 :(得分:0)

不是完整的答案,但我使用regexp搜索...

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

将此与a.split()结合使用,我们可以进行数学运算......