0

括号 = {')', '(', '{', '}', '[', '>', ']', '<'}

string_line = <[2{12.5 6.0}](3 -4 5)>'

基本上,对于集合中的括号,我必须在 string_line 中的任何括号周围添加空格。例如'['变成'['假设我不知道它包含什么括号,我怎样才能避免重复line.replace 8次?(有8种括号)

谢谢!

4

2 回答 2

1

您可以尝试使用正则表达式。最后的愚蠢while循环是由于我不知道如何替换重叠匹配。对于这个项目的任何建议,我将不胜感激。

#! /usr/bin/python3

import re

string_line = '<[2{12.5 6.0}](3 -4 5)>'

while True:
    string_line, count = re.subn ('[{}<>\[\]()][{}<>\[\]()]', lambda x: '{} {}'.format (*x.group () ), string_line)
    if not count: break

print (string_line)

这产生:

< [2{12.5 6.0} ] (3 -4 5) >

基本上在以下两个括号之间插入一个空格。如果这不是预期的行为,请告诉我预期的输出。

于 2013-08-02T18:09:37.607 回答
0

尝试使用列表操作:

import functools
def replaceif(x):
    if x in brackets:
        x=' '+x+' '
    return x
brackets = [')', '(', '{', '}', '[', '>', ']', '<']
string_line = '<[2{12.5 6.0}](3 -4 5)>'
print(functools.reduce(lambda x,y: replaceif(x)+replaceif(y), string_line))
于 2013-08-02T07:36:01.763 回答