正则表达式:在所有行中查找多个匹配的字符串

时间:2016-01-27 23:13:45

标签: regex string replace character match

我正在尝试使用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 或任何其他替换方法的情况下执行此操作,只需匹配正则表达式中的所需模式?

3 个答案:

答案 0 :(得分:4)

您可以使用此查找模式:

:(.*?)(,|$)

这个替换模式:

:null\2

第一组将匹配任何符号(点)零次或多次(星号)与此最后一个量词懒惰(问号),这最后一部分意味着它将尽可能少地匹配。第二组将匹配逗号或字符串的结尾。在替换模式中,我将第一组替换为null(根据需要),并保持第二组匹配的符号不变。

答案 1 :(得分:1)

这是一个关于amaurs回答的替代方案,它在最后一次替换后没有放入逗号:

:\K(.*?)(?=,|$)

这种替代模式:

null

这就像amaurs一样,但在找到冒号后开始匹配(使用\ K重置匹配起点)并匹配直到新行的逗号(使用正向前看)。

我已经测试过,这适用于Sublime Text 2(因此应该在Sublime Text 3中使用)

另一个稍微好一点的替代方案是:

(?<=:).+?(?=,|$)

使用正向lookbehind而不是重置正则表达式起点

另一个好的选择(到目前为止效率最高):

:\K[^,]*

答案 2 :(得分:0)

这可能有所帮助。

查找:(?<=:)[^,]*
替换:null