正则表达式在单个qoutes之间查找空格并用下划线替换

时间:2017-11-02 01:03:33

标签: regex replace find

我有一个我导出的数据库表。我需要用空格替换图像文件名,并希望使用notepad ++和regex这样做。我有:

'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'

需要让它们看起来像这样:

'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'

我只想更改引号之间的空格(我不想更改大小写)。更具体地说,我想替换'data /和'之间的任何和所有空格,因为DB中的引号之间还有其他空格,例如:

'data/ REPLACE ANY SPACE HERE '

我发现了这个:

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

但是还有其他地方引号之间有空格,所以我想在beging中搜索data/,而不仅仅是单引号,但我无法弄清楚如何。我试过了\s(?!(?:[^'data\/]*'[^']*')*[^']*$)但它没有用,我对正则表达式不够熟悉,不能这样做。

数据库中的完整行示例如下:

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

我不想替换行末尾的时间和数据标记中的空格,只是替换图像文件名。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您必须使用基于\G的模式来确保匹配是连续的。

搜索:(?:\G(?!^)|'data/)[^' ]*\K[ ]
替换:_

第一个匹配使用交替的第二个分支,然后下一个匹配是连续的并使用第一个分支。