json 记事本++正则表达式,用唯一值替换唯一值

rsl1atfo  于 2023-03-04  发布在  其他
关注(0)|答案(1)|浏览(127)

我有一个JSON,它包含了很多数据,其中包括多个ID。每个ID都包含数字和字母。每个ID都是唯一的。

  • 示例外观:"Id": "3L2kVk023"
  • 我希望它看起来如何(数字可以是随机的):"Id": "156228427"

我的应用程序不再接受带字母的ID,所以我需要将它们全部改为数字,并且每个ID必须是唯一的。
在记事本++中有没有自动的方法来做这件事?我发现很难为它写正则表达式,因为所有的ID都是唯一的,必须一个接一个地替换。

vyswwuz2

vyswwuz21#

这不能用Notepad中的普通正则表达式替换来实现。在Notepad中实现这一点的最佳方法是使用PythonScript插件。
如果尚未安装,请访问此链接:Guide: How to install the PythonScript plugin on Notepad++
使用以下代码从记事本++主菜单(插件〉〉PythonScript〉〉新建脚本)创建脚本并保存文件(例如replace-random.py

import re
import random
import hashlib

def calculate(match):
    # copy match (only for better understanding)
    IdFound = match.group(0)
    # make sure passing an encoded string
    IdNew = int(hashlib.sha256(IdFound.encode('utf-8')).hexdigest(), 16) % 10**9
    # format return string
    return '"Id": "' + str(IdNew) + '",'

editor.rereplace(r'"Id": "[A-Za-z0-9]+",', calculate)

假设要处理以下JSON记录(注意:第一个和最后一个ID相同)。

{
    "Order ID": 4984,
    "Parts group": "INTERIO",
    "Id": "3K2kVk023",
    "Order description": "justo. Nullam"
},
{
    "Order ID": 1925,
    "Parts group": "ELECTRA",
    "Id": "3L2kWk024",
    "Order description": "imperdiet"
},
{
    "Order ID": 8651,
    "Parts group": "INTERIO",
    "Id": "3K2kVk023",
    "Order description": "eu pede mollis"
}
  • 在记事本++中打开要编辑的文件。
  • 运行脚本(插件〉〉PythonScript〉〉脚本〉〉替换随机)

这导致:

相关问题