JSON- 用于识别 JSON 中的模式的正则表达式
JSON- Regex to identify a pattern in JSON
我是 Python3 的新手,我正在处理大型 JSON 对象。我有一个大的 JSON 对象,它在两个 JSON 对象之间有额外的字符,在大括号之间。
例如:
{"id":"121324343", "name":"foobar"}3$£_$£rvcfddkgga£($(>..bu&^783 { "id":"343554353", "name":"ABCXYZ"}'
这些额外的字符可以是任何字母数字、特殊字符或 ASCII。它们多次出现在这个大 JSON 中,并且可以是任意长度。我正在尝试使用正则表达式来识别该模式以删除它们,但正则表达式似乎不起作用。这是我使用的正则表达式:
(^}\n[a-zA-Z0-9]+{$)
在 python 中是否有使用正则表达式识别此类模式的方法?
假设整个 json 是一行,并且字段本身没有 }{,这应该足够了
In [1]: import re
In [2]: x = """{"id":"121324343", "name":"foobar"}3$£_$£rvcfddkgga£($(>..bu&^783 { "id":"343554353", "name":"ABCXYZ"}"""
In [3]: print(re.sub(r'(?<=})[^}{]+(?={)', "\n", x))
{"id":"121324343", "name":"foobar"}
{ "id":"343554353", "name":"ABCXYZ"}
您可以在此处检查正则表达式 https://regex101.com/r/leIoqE/1
您可以select基于named capture groups
的词典数据。作为奖励,这还将忽略额外字符中的任何 {
或 }
。
以下模式适用于提供的数据:
"\"id\"\:\"(?P<id>\d+?)\"[,\s]+\"name\"\:\"(?P<name>[ \w]+)\""
例子
import re
from pprint import pprint
string = \
"""
{"id":"121324343", "name":"foobar"}3$£_$£rvcfdd{}kgga£($(>..bu&^783 { "id":"343554353", "name":"ABC XYZ"}'
"""
pattern = re.compile(pattern="\"id\"\:\"(?P<id>\d+?)\"[,\s]+\"name\"\:\"(?P<name>[ \w]+)\"")
pprint([match.groupdict() for match in pattern.finditer(string=string)])
- 输出
[{'id': '121324343', 'name': 'foobar'}, {'id': '343554353', 'name': 'ABC XYZ'}]
备注
对于这个例子,我假设如下:
id
只包含整数。
name
是一个字符串,可以包含以下字符[a-zA-Z0-9_ ]
。 (这包括空格和下划线)。
我是 Python3 的新手,我正在处理大型 JSON 对象。我有一个大的 JSON 对象,它在两个 JSON 对象之间有额外的字符,在大括号之间。
例如:
{"id":"121324343", "name":"foobar"}3$£_$£rvcfddkgga£($(>..bu&^783 { "id":"343554353", "name":"ABCXYZ"}'
这些额外的字符可以是任何字母数字、特殊字符或 ASCII。它们多次出现在这个大 JSON 中,并且可以是任意长度。我正在尝试使用正则表达式来识别该模式以删除它们,但正则表达式似乎不起作用。这是我使用的正则表达式:
(^}\n[a-zA-Z0-9]+{$)
在 python 中是否有使用正则表达式识别此类模式的方法?
假设整个 json 是一行,并且字段本身没有 }{,这应该足够了
In [1]: import re
In [2]: x = """{"id":"121324343", "name":"foobar"}3$£_$£rvcfddkgga£($(>..bu&^783 { "id":"343554353", "name":"ABCXYZ"}"""
In [3]: print(re.sub(r'(?<=})[^}{]+(?={)', "\n", x))
{"id":"121324343", "name":"foobar"}
{ "id":"343554353", "name":"ABCXYZ"}
您可以在此处检查正则表达式 https://regex101.com/r/leIoqE/1
您可以select基于named capture groups
的词典数据。作为奖励,这还将忽略额外字符中的任何 {
或 }
。
以下模式适用于提供的数据:
"\"id\"\:\"(?P<id>\d+?)\"[,\s]+\"name\"\:\"(?P<name>[ \w]+)\""
例子
import re
from pprint import pprint
string = \
"""
{"id":"121324343", "name":"foobar"}3$£_$£rvcfdd{}kgga£($(>..bu&^783 { "id":"343554353", "name":"ABC XYZ"}'
"""
pattern = re.compile(pattern="\"id\"\:\"(?P<id>\d+?)\"[,\s]+\"name\"\:\"(?P<name>[ \w]+)\"")
pprint([match.groupdict() for match in pattern.finditer(string=string)])
- 输出
[{'id': '121324343', 'name': 'foobar'}, {'id': '343554353', 'name': 'ABC XYZ'}]
备注
对于这个例子,我假设如下:
id
只包含整数。name
是一个字符串,可以包含以下字符[a-zA-Z0-9_ ]
。 (这包括空格和下划线)。