Regex Find Spaces between single qoutes and replace with underscore

老子叫甜甜 提交于 2021-02-07 14:28:29

问题


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!


回答1:


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.



来源:https://stackoverflow.com/questions/47065992/regex-find-spaces-between-single-qoutes-and-replace-with-underscore

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!