从子组中删除元素
Remove elements from a subgroup
我有以下字符串,我需要清理数组中的零元素,由于某些原因我必须使用正则表达式,因为我使用的脚本语言不能 serialize/deserialize 我只有正则表达式引擎。
字符串:
{
"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*)
输出:
详情
(?<="admins":\s*\[[^][]*?)
- 因为你只想删除 "admins":[
子串后方括号内的 0
s,这个正后向是为了检查那个条件,当前位置必须立即前面有:
"admins":
- 文字子串
\s*
- 0+ 个空格
\[
- 一个 [
字符
[^][]*?
- 除了 [
和 ]
之外的 0 个或更多字符,尽可能少
(?:
- 交替组的开始:
(?<=\[)
- [
必须紧接在当前位置 之前
0
- 零
(?:,\s*0\b)*
- ,
、0+ 个空格、0
和单词边界 的零次或多次重复
,?
- 一个可选的逗号
|
- 或者
\s*,\s*
- 用可选的 0+ 个空格括起来的逗号
0
- 零
\b
- 单词边界
\s*
- 0+ 个空格
)
- 交替组结束
这个交替组是区分括号子字符串开头的零和后面的零所必需的,以便一致地删除逗号和空格。
我有以下字符串,我需要清理数组中的零元素,由于某些原因我必须使用正则表达式,因为我使用的脚本语言不能 serialize/deserialize 我只有正则表达式引擎。
字符串:
{
"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*)
输出:
详情
(?<="admins":\s*\[[^][]*?)
- 因为你只想删除"admins":[
子串后方括号内的0
s,这个正后向是为了检查那个条件,当前位置必须立即前面有:"admins":
- 文字子串\s*
- 0+ 个空格\[
- 一个[
字符[^][]*?
- 除了[
和]
之外的 0 个或更多字符,尽可能少
(?:
- 交替组的开始:(?<=\[)
-[
必须紧接在当前位置 之前
0
- 零(?:,\s*0\b)*
-,
、0+ 个空格、0
和单词边界 的零次或多次重复
,?
- 一个可选的逗号
|
- 或者\s*,\s*
- 用可选的 0+ 个空格括起来的逗号0
- 零\b
- 单词边界\s*
- 0+ 个空格
)
- 交替组结束
这个交替组是区分括号子字符串开头的零和后面的零所必需的,以便一致地删除逗号和空格。