嗨,我有如下数据
[{
s1 = 98493456645
s2 = 0000000000
102 = 93234,
12 =
15 = rahdeshfui
16 = 2343432,234234
},
{
s1 = 435234235
s2 = 01
102 = 45336
12 =
15 = vjsfrh@gmail.com
16 = 2415454
}
]
现在使用reg表达式,我需要更改为json格式,并且我已经尝试过
regexp:-([^\s]+?.*)=((.*(?=,$))+|.*).*
替换值:-"$1":"$2",
对于此值,我得到的输出如下
[{
"s1":"98493456645",
"s2":"0000000000",
"102":"93234,",
"12":"",
"15":"rahdeshfui",
"16":"2343432,234234",
},
{
"s1":"435234235",
"s2":"01",
"102":"45336",
"12":"",
"15":"vjsfrh@gmail.com",
"16":"2415454"
}
]
但是我的预期输出应该如下
[{
"s1":98493456645,
"s2":0,
"102":93234,
"12":"",
"15":"rahdeshfui",
"16":"2343432,234234",
},
{
"s1":435234235,
"s2":01,
"102":45336,
"12":"",
"15":"vjsfrh@gmail.com",
"16":"2415454"
}
]
对于数字,它们不应该在“”中,如果我的值大于0,则需要用单0代替;对于某些值,我的末尾有,
,我需要跳过{{ 1}},如果我有一个
答案 0 :(得分:2)
这可能有点麻烦,但是您想要替换多个内容,因此一种选择可能是使用多个替换项。
请注意,这些模式不考虑开头[{
和结束]]
或任何嵌套,而只考虑键值部分,因为您的过帐模式用于示例数据。
1。),将键和值用双引号引起来,而不会捕获 末尾的逗号,并与等号匹配,包括周围的字符 空格:
(\S+) = (\S*?),?(?=\n)
并替换为"$1":"$2",
2。)。删除数字周围的双引号,但以0开头的双引号除外:
("[^"]+":)"(?!0+[1-9])(\d+)""
并替换为$1$2
3。)。删除最后一个键值后的逗号:
("[^"]+":)(\S+),(?!\n *"\w+")
并替换为$1$2
4。)将2个或多个零替换为一个零:
("[^"]+":)0{2,}
并替换为$10
这将导致:
[{
"s1":98493456645,
"s2":0,
"102":93234,
"12":"",
"15":"rahdeshfui",
"16":"2343432,234234"
},
{
"s1":435234235,
"s2":"01",
"102":45336,
"12":"",
"15":"vjsfrh@gmail.com",
"16":2415454
}
]
假定最后一个值"16":"2415454"
为"16":2415454
,因为该值仅包含数字。