我想从带有复杂圆括号的字符串中获取圆括号内的字符串。
此外,括号内字符串中的括号是正确配对的。
例如,对于输入abc[a[12] + b[1] * (12 + 13)] = efg[14]
,
如果请求是这样来的,abc[<Answer string>]
在这种情况下,<Answer string>
既不是a[12
,也不是a[12] + b[1
,也不是a[12] + b[1] * (12 + 13)] = efg[14
,而是a[12] + b[1] * (12 + 13)
。
这个问题是为了修改python代码而提出的。我加了一个我用过的例子。
输入
self._vars[os.path.basename(b)[:-4]] = nn.Parameter(v, requires_grad=requires_grad)
输出
setattr(self, os.path.basename(b)[:-4], nn.Parameter(v, requires_grad=requires_grad))
您可以尝试以下操作:
import re
string = 'abc[a[12] + b[1] * (12 + 13)]'
match = re.findall('[(.+)]', string)
print(match[0])
输出:
a[12] + b[1] * (12 + 13)
这里,[(.+)]
匹配外部方括号之间的所有内容。
编辑:
要从输入abc[a[12] + b[1] * (12 + 13)] = efg[14]
匹配a[12] + b[1] * (12 + 13)
,可以使用正则表达式[(.+)] =
或[(.+)]
(注意后者末尾的空格(。
这个想法是提取模式方括号内的所有内容"blah[…]=blah",因此,您可以尝试以下regex。
包含括号(.+(的组与任意数量的字符匹配一次或多次。括号控制在匹配之后返回字符串的哪些部分
import re
input = 'abc[a[12] + b[1] * (12 + 13)] = efg[14]'
output = re.findall('[(.+)] =', input)
for e in output: #output is a list
print(e)
输出:
a[12] + b[1] * (12 + 13)