我有以下输入:
"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 :(得分: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()
结合使用,我们可以进行数学运算......