我正在使用Visual Studio代码,我有一个非常大的JSON文件,我想对它进行一些编辑。在所有以"category":
开头的行的示例中,我想找到>
的第一个示例,并删除它和后面的所有内容,除了最后的逗号。然后作为一个单独的查询,我想执行类似的操作。我想找到〉的最后一个示例,并删除它及其前面的所有内容
例如,对于第一个查询"category": "Level1 > Level2 > Level3",
或"category": "Level1 > Level2",
将替换为"category": "Level1",
,从而剥离从第一个>
开始的所有内容
并且对于第二查询"subCategory": "Level1 > Level2 > Level3",
将替换为"subCategory": "Level3",
基本上将从最后一个>
返回到"
的所有内容剥离
“级别1”、“级别2”等可以是任何内容
目前为止我最大的努力就是找到"category": ?(.+)
这发现行还可以,但没有提供任何东西可以作为替代。我应该知道这一点,但Regex似乎需要一段时间才能融入。
2条答案
按热度按时间yx2lnoni1#
经过反复试验,我找到了答案,这要感谢一个不知名的用户,他在这里发布了部分解决方案,但很快就删除了。不幸的是,我没有注意到用户名。
对于第一个查询:找到任何以
"category":
开头的行,并删除从第一个>
到结尾逗号之间的所有内容。在Visual Studio代码的查找/替换对话框中(Ctrl+H)
查找:
("category":\s*)("[^>]*[^>\s])\s*>.*(",)
更换:
$1$2$3
第二个查询:找到任何以
"subCategory":
开头的行,并删除所有其他行,包括我最后使用的>
:查找:
("subCategory":\s*").*[$>]*>\s(.*",)
更换:
$1$2
g6ll5ycj2#
这看起来比你的正则表达式简单一些。
对于第一个查询,请参见regex101 demo:
查找:
(?<=\bcategory":.*)\s*>.*(?=",)
将:替换为空
对于第二个查询,请参见regex101 demo:
查找:
(?<=\bsubCategory":\s*")(.*>\s*)
将:替换为空
这些功能可以在Find in a file小部件中使用,但不适用于跨多个文件的搜索-因为lookbehind的长度不固定。
如果您希望它在跨文件搜索中起作用,请使用:
查找:
(\bcategory":.*?)\s*>.*(?=",)
更换:
$1
查找:
(\bsubCategory":\s*")(.*>\s*)
更换:
$1