我有以下字符串,我需要调整数组中的零元素,出于某些原因,我必须使用正则表达式,因为我使用的脚本语言无法序列化/反序列化,我只有一个正则表达式引擎。
{ "admins": [0, 148, 10, 0, 0, 0, 0, 0, 0, 0, 0], "auth": "30639096bfe4ec4b9f17696ef1d02b9a", }
并输出如下字符串:
{ "admins": [148], "auth": "30639096bfe4ec4b9f17696ef1d02b9a", }
或者最终,如果全部为零:
{ "admins": [], "auth": "30639096bfe4ec4b9f17696ef1d02b9a", }
(?<=admins":[[:space:]]\[)(.*(,[[:space:]]0))(?=\])
我找不到删除子组数据的正确方法,实际上我在这里: https://regex101.com/r/4yRSCn/1
由于您使用的是带有.NET正则表达式引擎的正则表达式,因此可以利用它的无限长查找模式特性。
(?<="admins":\s*\[[^][]*?)(?:(?<=\[)0(?:,\s*0\b)*,?|\s*,\s*0\b\s*)
.NET regex demo .
输出:
(?<="admins":\s*\[[^][]*?)
0
"admins":[
"admins":
\s*
\[
[
[^][]*?
]
(?:
(?<=\[)
(?:,\s*0\b)*
,
,?
|
\s*,\s*
\b
\*
)
此交替组是区分括号内子字符串开头的零和后面的零所必需的,以便始终删除逗号和空格。