我有一些损坏的JSON文件需要修复。
问题在于其中一个字段AcquisitionDateTime格式不正确:
{
"AcquisitionDateTime": 2016-04-28T17:09:39.515625,
}
我想做的是将值用括号括起来。我可以很容易地使用正则表达式实现:
perl -pi -e 's/\"AcqDateTime\": (.*),/\"AcqDateTime\": \"\1\",/g' t.json
现在,我想扩展正则表达式,以便在JSON未损坏的情况下,内容不会被两次包装在""中。我面临的问题是不知道如何混合前瞻、if/then语句和捕获组。这是我的尝试:
Lookahead, if you find a ", then capture what is between it. Else capture everything.
perl -pi -e 's/\"AcqDateTime\": (?(?=\")\"(.*)\"|(.*)),/\"AcqDateTime:\" \"\1\",/g' t.json
这是我感兴趣的部分:
Lookahead for a \" -> if yes, then capture without it. \"(.*)\" Else capture all (.*)
(?(?=\")\"(.*)\"|(.*)),
请问我哪里做错了呢?谢谢提前回答。
\1
应该是$1
。而且不需要转义所有的"
。 - ikegami