Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Regex Find Spaces between single qoutes and replace with underscore

I have a database table that I have exported. I need to replace the image file name with a space and would like to use notepad++ and regex to do so. I have:

'data/green tea powder.jpg'
'data/prod_img/lumina herbal shampoo.JPG'
'data/ALL GREEN HERBS.jpeg'
'data/prod_img/PSORIASIS KIT (640x530) (2).jpg'

and need to make them look like this:

'data/green_tea_powder.jpg'
'data/prod_img/lumina_herbal_shampoo.JPG'
'data/ALL_GREEN_HERBS.jpeg'
'data/prod_img/PSORIASIS_KIT_(640x530)_(2).jpg'

I just want to change the spaces between the quotes (I don't want to change the capitalization). To be more specific I would like to replace any and all spaces between 'data/ and ' because there are other spaces between quotes in the DB, for example:

'data/ REPLACE ANY SPACE HERE '

I found this:

\s(?!(?:[^']*'[^']*')*[^']*$)

but there are other places where there are spaces between quotes so I'd like to search for data/ in the beging and not just a single quote but I can't figure out how. I tried \s(?!(?:[^'data\/]*'[^']*')*[^']*$) but it didn't work and I am not familiar enough with regex to make it do so.

An example of a full line from the database is:

(712, 'GRTE-P', '', 'data/green tea powder.jpg', '2014-03-12 22:52:03'),

I don't want to replace the spaces in the time and data stamp at the end of the line, just the image file names.

Thanks in advance for your help!

like image 991
MattM Avatar asked Oct 29 '22 23:10

MattM


1 Answers

You have to use a \G based pattern to ensure that matches are contiguous.

search: (?:\G(?!^)|'data/)[^' ]*\K[ ]
replace: _

The first match uses the second branch of the alternation, then the next matches are contiguous and use the first branch.

like image 93
Casimir et Hippolyte Avatar answered Nov 15 '22 10:11

Casimir et Hippolyte