Python удалить JSON-подстроку - PullRequest
4 голосов
/ 09 ноября 2011

Если у меня есть строка, в которой есть допустимая подстрока JSON, такая как эта:

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

Каков наилучший способ извлечь только строку JSON? Числа снаружи могут быть чем угодно (кроме { или }), включая переводы строк и тому подобное.

Просто чтобы прояснить, это результат, который я хочу

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

Лучший способ сделать это - использовать find и rfind, а затем взять подстроку. Это кажется мне слишком многословным и не соответствует Python 3.0 (что я бы предпочел, но не обязательно)

Любая помощь приветствуется.

1 Ответ

6 голосов
/ 09 ноября 2011

Обратите внимание, что следующий код в значительной степени предполагает, что по обе стороны строки 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)

Несмотря на то, что для поддержки, комментирование регулярных выражений очень желательно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...