regex 正则表达式查找替换匹配字符串并从字符的第一个示例中删除所有内容

zlwx9yxi  于 2023-03-04  发布在  其他
关注(0)|答案(2)|浏览(197)

我正在使用Visual Studio代码,我有一个非常大的JSON文件,我想对它进行一些编辑。在所有以"category":开头的行的示例中,我想找到>的第一个示例,并删除它和后面的所有内容,除了最后的逗号。然后作为一个单独的查询,我想执行类似的操作。我想找到〉的最后一个示例,并删除它及其前面的所有内容
例如,对于第一个查询
"category": "Level1 > Level2 > Level3",

"category": "Level1 > Level2",
将替换为
"category": "Level1",,从而剥离从第一个>开始的所有内容
并且对于第二查询
"subCategory": "Level1 > Level2 > Level3",
将替换为
"subCategory": "Level3",基本上将从最后一个>返回到"的所有内容剥离
“级别1”、“级别2”等可以是任何内容
目前为止我最大的努力就是找到
"category": ?(.+)
这发现行还可以,但没有提供任何东西可以作为替代。我应该知道这一点,但Regex似乎需要一段时间才能融入。

yx2lnoni

yx2lnoni1#

经过反复试验,我找到了答案,这要感谢一个不知名的用户,他在这里发布了部分解决方案,但很快就删除了。不幸的是,我没有注意到用户名。
对于第一个查询:找到任何以"category":开头的行,并删除从第一个>到结尾逗号之间的所有内容。
在Visual Studio代码的查找/替换对话框中(Ctrl+H)

查找:("category":\s*)("[^>]*[^>\s])\s*>.*(",)
更换:$1$2$3

第二个查询:找到任何以"subCategory":开头的行,并删除所有其他行,包括我最后使用的>

查找:("subCategory":\s*").*[$>]*>\s(.*",)
更换:$1$2

g6ll5ycj

g6ll5ycj2#

这看起来比你的正则表达式简单一些。
对于第一个查询,请参见regex101 demo
查找:(?<=\bcategory":.*)\s*>.*(?=",)
将:替换为空
对于第二个查询,请参见regex101 demo
查找:(?<=\bsubCategory":\s*")(.*>\s*)
将:替换为空
这些功能可以在Find in a file小部件中使用,但不适用于跨多个文件的搜索-因为lookbehind的长度不固定。
如果您希望它在跨文件搜索中起作用,请使用:
查找:(\bcategory":.*?)\s*>.*(?=",)
更换:$1
查找:(\bsubCategory":\s*")(.*>\s*)
更换:$1

相关问题