bobasti
bobasti

Reputation: 1918

Regex: Find multiple matching strings in all lines

I'm trying to match multiple strings in a single line using regex in Sublime Text 3.
I want to match all values and replace them with null.

Part of the string that I'm matching against:

"userName":"MyName","hiScore":50,"stuntPoints":192,"coins":200,"specialUser":false

List of strings that it should match:

"MyName"
50
192
200
false

Result after replacing:

"userName":null,"hiScore":null,"stuntPoints":null,"coins":null,"specialUser":null

Is there a way to do this without using sed or any other substitution method, but just by matching the wanted pattern in regex?

Upvotes: 2

Views: 887

Answers (3)

RedLaser
RedLaser

Reputation: 680

Here is an alternative on amaurs answer where it doesn't put the comma in after the last substitution:

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

And this replacement pattern:

null

This works like amaurs but starts matching after the colon is found (using the \K to reset the match starting point) and matches until a comma of new line (using a positive look ahead).

I have tested and this works in Sublime Text 2 (so should work in Sublime Text 3)

Another slightly better alternative to this is:

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

which uses a positive lookbehind instead of resetting the regex starting point

Another good alternative (so far the most efficient here):

:\K[^,]*

Upvotes: 1

user557597
user557597

Reputation:

This may help.

Find: (?<=:)[^,]*
Replace: null

Upvotes: 0

amaurs
amaurs

Reputation: 1632

You can use this find pattern:

:(.*?)(,|$)

And this replace pattern:

:null\2

The first group will match any symbol (dot) zero or more times (asterisk) with this last quantifier lazy (question mark), this last part means that it will match as little as possible. The second group will match either a comma or the end of the string. In the replace pattern, I substitute the first group with null (as desired) and I leave the symbol matched by the second group unchanged.

Upvotes: 4

Related Questions