使用Python正则提取复杂嵌套括号内字符串并修改代码示例
嵌套括号内容提取与代码转换实现
一、嵌套括号内容提取
处理多层嵌套括号的字符串时,普通字符串分割会因层级问题导致截断错误,通过栈计数法跟踪括号层级,可精准定位最外层括号的闭合位置:
实现代码
def extract_nested_content(s, start_char='[', end_char=']'): start_idx = s.find(start_char) if start_idx == -1: return None count = 1 end_idx = start_idx + 1 while end_idx < len(s) and count > 0: if s[end_idx] == start_char: count += 1 elif s[end_idx] == end_char: count -= 1 end_idx += 1 return s[start_idx+1 : end_idx-1] if count == 0 else None
测试示例
输入字符串:abc[a[12] + b[1] * (12 + 13)] = efg[14]
调用函数提取abc[ ]内的内容:
input_str = "abc[a[12] + b[1] * (12 + 13)] = efg[14]" result = extract_nested_content(input_str) print(result) # 输出:a[12] + b[1] * (12 + 13)
二、特定代码格式转换
针对self._vars[xxx] = yyy格式的代码,将其转换为setattr(self, xxx, yyy)格式,结合上述嵌套括号提取逻辑拆分内容后重新拼接:
实现代码
def convert_vars_to_setattr(s): prefix = 'self._vars[' if not s.startswith(prefix): return s content = extract_nested_content(s, '[', ']') if content is None: return s assign_pos = s.find('] = ') if assign_pos == -1: return s right_part = s[assign_pos+3:] return f"setattr(self, {content}, {right_part})"
测试示例
输入代码字符串:self._vars[os.path.basename(b)[:-4]] = nn.Parameter(v, requires_grad=requires_grad)
调用函数转换:
input_code = "self._vars[os.path.basename(b)[:-4]] = nn.Parameter(v, requires_grad=requires_grad)" result_code = convert_vars_to_setattr(input_code) print(result_code) # 输出:setattr(self, os.path.basename(b)[:-4], nn.Parameter(v, requires_grad=requires_grad))
内容的提问来源于stack exchange,提问作者tsp
相关产品推荐
相关产品推荐

