正则表达式:在匹配其他内容时查找替换

RegEx: Find&Replace, when matching on something else

首先,不知道这是否可以通过正则表达式来完成。

我有一个 Json 这样的:

{"transfId":"S0722182156164591494745777M","messageId":"123","from":"5777","to":"59395436474","status":-1,"checkId":"1975","price":0,"keyword":"OK","errorCode":601,"errorMessage":"SUCCESS","date":"20150730 09:00:00","model":"wer_tr"}

在一个有 6000 行的文件中,并且只需要更改 "checkId" 值,但仅在其他字段具有特定值的情况下。 更清楚:只想在 "keyword":"OK" 和 "from":"5777"

时更改 "checkId" 值

我已经找到了如何找到它:\b5777\b.*?\bOK 如何进行更换? 提前致谢。

您可以通过以下方式获取值:

\{.+\"from\":\"(\d+)\".+\"checkId\":\"(\d+)\".+\"keyword\":\"([a-zA-Z]+)\".+\}

DEMO

它是相当简单的正则表达式,因此应该适用于多种语言。 然后使用 if 语句,查找 checkId 是否应该更改,并更改它。 您还可以修改捕获组并使用替换:

(\{.+\"from\":\"(\d+)\".+\"checkId\":\")(\d+)(\".+\"keyword\":\"([a-zA-Z]+)\".+\})

DEMO

您可以使用这样的正则表达式:

({(?:(?!}).)*"from": "5777".*?"checkId": ")[^"]*(".*?"keyword": "OK")

它只在左大括号和下一个右大括号之间搜索。它在您要替换的部分的两侧都有两个捕获组。您可以将其替换为类似以下的字符串:

<your_new_checkId_here>

https://regex101.com/r/fY8pA7/1