基于表达式'x = {(.*)}'返回字符串中的字符串

Sco*_*t G 5 python regex

我有一个可以变化但总是包含的字符串x={stuffNeeded}.

例如:n=1,x={y,z,w},erore={3,4,5}x={y,z,w}erore={3,4,5},x={y,z,w}

我正在寻找一个如何获得的魔鬼y,z,w.我找到答案的最接近的是基于Yatharth对另一篇文章的回答正则表达式返回两个特殊字符之间的所有字符.

我的搜索到目前为止,我发现了几乎有用的东西.测试在http://rubular.com/r/bgixv2J6yF和python中完成.

这在python中测试使用:

i='n=1,x={y,z,w},erore={3,4,5}'
j='n=1,x={y,z,w}'
print re.search('x={(.*)}',i).group(1)
print re.search('x={(.*)}',j).group(1)
print re.search('x={(.*)}.',i).group(1)
print re.search('x={(.*)}.',j).group(1)
Run Code Online (Sandbox Code Playgroud)

四种不同印刷品的结果:

'y,z,w'
'y,z,w},erore={3,4,5'
AttributeError: 'NoneType' object has no attribute 'group'
'y,z,w'
Run Code Online (Sandbox Code Playgroud)

需要的结果是'y,z,w'所有情况,然后如果x={*}真的没有找到我会把错误捕获.

先感谢您.

Ash*_*jan 6

这个正则表达式做你想做的事情:

regex = r'x={([^\}]*)}'
Run Code Online (Sandbox Code Playgroud)

现场演示在这里

说明

  • {([^\}]*):寻找一个开括号,然后查找(并捕获)任意数量的非}字符.因此,您的组1将包含x的捕获值.
  • }:寻找一个结束括号