我正在尝试使用Sublime Text 3中的正则表达式匹配单行中的多个字符串。
我希望匹配所有值并将其替换为null.
我正在匹配的字符串的一部分:
"userName":"MyName","hiScore":50,"stuntPoints":192,"coins":200,"specialUser":false
应匹配的字符串列表:
"MyName"
50
192
200
false
更换后的结果:
"userName":null,"hiScore":null,"stuntPoints":null,"coins":null,"specialUser":null
有没有办法在不使用 sed 或任何其他替换方法的情况下执行此操作,只需匹配正则表达式中的所需模式?
答案 0 :(得分:4)
您可以使用此查找模式:
:(.*?)(,|$)
这个替换模式:
:null\2
第一组将匹配任何符号(点)零次或多次(星号)与此最后一个量词懒惰(问号),这最后一部分意味着它将尽可能少地匹配。第二组将匹配逗号或字符串的结尾。在替换模式中,我将第一组替换为null(根据需要),并保持第二组匹配的符号不变。
答案 1 :(得分:1)
这是一个关于amaurs回答的替代方案,它在最后一次替换后没有放入逗号:
:\K(.*?)(?=,|$)
这种替代模式:
null
这就像amaurs一样,但在找到冒号后开始匹配(使用\ K重置匹配起点)并匹配直到新行的逗号(使用正向前看)。
我已经测试过,这适用于Sublime Text 2(因此应该在Sublime Text 3中使用)
另一个稍微好一点的替代方案是:
(?<=:).+?(?=,|$)
使用正向lookbehind而不是重置正则表达式起点
另一个好的选择(到目前为止效率最高):
:\K[^,]*
答案 2 :(得分:0)
这可能有所帮助。
查找:(?<=:)[^,]*
替换:null