Python删除JSON子字符串

时间:2011-11-09 17:13:55

标签: python string json

如果我有一个字符串,其中有一个有效的JSON子字符串,如下所示:

 mystr = '100{"1":2, "3":4}312'

提取JSON字符串的最佳方法是什么?外面的数字可以是任何内容({}除外),包括换行符和类似内容。

为了清楚起见,这是我想要的结果

  newStr = '{"1":2, "3":4}'

我能想到的最佳方法是使用findrfind然后获取子字符串。这对我来说似乎太冗长了,它不符合python 3.0(我更喜欢但不是必需的)

感谢任何帮助。

1 个答案:

答案 0 :(得分:6)

请注意,以下代码非常假定JSON字符串两侧除了非括号内容之外没有其他内容。

import re
matcher = re.compile(r"""
^[^\{]*          # Starting from the beginning of the string, match anything that isn't an opening bracket
       (         # Open a group to record what's next
        \{.+\}   # The JSON substring
       )         # close the group
 [^}]*$          # at the end of the string, anything that isn't a closing bracket
""", re.VERBOSE)

# Your example
print matcher.match('100{"1":2, "3":4}312').group(1)

# Example with embedded hashmap
print matcher.match('100{"1":{"a":"b", "c":"d"}, "3":4}312').group(1)

简短的,未预编译的,未评论的版本:

import re
print re.match("^[^\{]*(\{[^\}]+\})[^}]*$", '100{"1":2, "3":4}312').group(1)

虽然为了维护起见,非常喜欢评论正则表达式。