括号 = {')', '(', '{', '}', '[', '>', ']', '<'}
string_line = <[2{12.5 6.0}](3 -4 5)>'
基本上,对于集合中的括号,我必须在 string_line 中的任何括号周围添加空格。例如'['变成'['假设我不知道它包含什么括号,我怎样才能避免重复line.replace 8次?(有8种括号)
谢谢!
括号 = {')', '(', '{', '}', '[', '>', ']', '<'}
string_line = <[2{12.5 6.0}](3 -4 5)>'
基本上,对于集合中的括号,我必须在 string_line 中的任何括号周围添加空格。例如'['变成'['假设我不知道它包含什么括号,我怎样才能避免重复line.replace 8次?(有8种括号)
谢谢!
您可以尝试使用正则表达式。最后的愚蠢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) >
基本上在以下两个括号之间插入一个空格。如果这不是预期的行为,请告诉我预期的输出。
尝试使用列表操作:
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))