如果我有一个字符串,其中有一个有效的JSON子字符串,如下所示:
mystr = '100{"1":2, "3":4}312'
提取JSON字符串的最佳方法是什么?外面的数字可以是任何内容({
或}
除外),包括换行符和类似内容。
为了清楚起见,这是我想要的结果
newStr = '{"1":2, "3":4}'
我能想到的最佳方法是使用find
和rfind
然后获取子字符串。这对我来说似乎太冗长了,它不符合python 3.0(我更喜欢但不是必需的)
感谢任何帮助。
答案 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)
虽然为了维护起见,非常喜欢评论正则表达式。