JSON- 正则表达式来识别 JSON 中的模式

Posted

技术标签:

【中文标题】JSON- 正则表达式来识别 JSON 中的模式【英文标题】:JSON- Regex to identify a pattern in JSON 【发布时间】:2021-06-09 08:14:33 【问题描述】:

我是 Python3 的新手,我正在处理大型 JSON 对象。我有一个大的 JSON 对象,在两个 JSON 对象之间,大括号之间有额外的字符。

例如:

"id":"121324343", "name":"foobar"3$£_$£rvcfddkgga£($(>..bu&^783  "id":"343554353", "name":"ABCXYZ"'

这些额外的字符可以是任何字母数字、特殊字符或 ASCII。它们多次出现在这个大型 JSON 中,并且可以是任意长度。我正在尝试使用正则表达式来识别该模式以删除它们,但正则表达式似乎不起作用。这是我使用的正则表达式:

(^\n[a-zA-Z0-9]+$)

有没有办法在 python 中使用正则表达式来识别这种模式?

【问题讨论】:

您的正则表达式包含 \n 但您提供的行在单行上,是吗? 对于您展示的示例:".+" 就足够了,但我认为这不会通过所有测试用例。如果您知道 json 的模式将是 dict(id=number, name=string),您也可以对其进行过滤。示例:'\s?"id":"\d+", "name":"\w+"'(用于您提供的示例)。 我只是担心r'(?<=)([^]+)(?=)' 如果 出现在char 字符串中是问题,因为它应该识别" 以识别新对象是tarting @Thymen 在 dict 模式上过滤 json 听起来更合适。但是数据量大会影响性能 对象是否包含嵌套大括号? 【参考方案1】:

假设整个 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

【讨论】:

在这个解决方案中,如果字符有 或 它不起作用【参考方案2】:

您可以根据named capture groups 选择字典数据。作为奖励,这还将忽略额外字符中的任何

以下模式适用于提供的数据:

"\"id\"\:\"(?P<id>\d+?)\"[,\s]+\"name\"\:\"(?P<name>[ \w]+)\""

示例

import re
from pprint import pprint

string = \
    """
    "id":"121324343", "name":"foobar"3$£_$£rvcfddkgga£($(>..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']
自己测试一下:https://regex101.com/r/82BqbE/1

注意事项

对于这个例子,我假设如下:

id 只包含整数位。 name 是一个字符串,可以包含以下字符 [a-zA-Z0-9_ ]。 (这包括空格和下划线)。

【讨论】:

以上是关于JSON- 正则表达式来识别 JSON 中的模式的主要内容,如果未能解决你的问题,请参考以下文章

在 Hive 中,这种模式如何从 json 数组中识别嵌套的 json?

在 json 模式中使用正则表达式来验证没有空格的字符串?

如何创建正则表达式来查找 JS 文件(或 JSON)中的所有字符串

如何使用 Python 处理 JSON 文件中的正则表达式字符串

如何使用正则表达式匹配 JSON 字符串? [关闭]

javascript-如何在 json 字符串上使用正则表达式来搜索 JQuery 中的数据表列?