2014-10-01 3 views
1

Я довольно новичок в регулярном выражении, я могу писать выражения, чтобы выполнять самые простые операции переименования файлов, но это заставило меня застрять.Regex to alter deliminators filename

Я просто пытаюсь изменить deliminator в кучу имен файлов из «-» к «-», некоторые примеры:

"Author Name -Series 00 -Title.txt" needs to become: 
"Author Name - Series 00 - Title.txt" 

"Author_Name -[Series 01] -Title -Genre.txt" needs to become: 
"Author_Name - [Series 01] - Title - Genre.txt" 

Выражение должно быть в состоянии справиться с 1, 2 или 3 "-" deliminators, и должны игнорировать все другие дефисы, например "-" "-" и существующие "-" следует игнорировать. Например:

"File_Name1 - Sometext- more-info (V1.0).txt" Should not be changed at all. 

Он предназначен для использования в File Renamer, который находится на Python.

+2

[Заменить '' - (?!) «g' с' '-" '] (http://regex101.com/r/sB8rU3/1)? – Sam

+0

Это работает. По неизвестной причине в File Renamer также добавляется дополнительное пространство для существующих« - », но Я могу легко удалить их, так что не беспокойтесь. Спасибо. – Zarnia

ответ

0

Вы можете использовать positive look-ahead, выполнить поиск по следующей схеме и заменить ее правильными символами. В начале рисунка есть пробел. Вы также можете использовать селектор белого пробела \s.

-(?=[^ ]) 

или с символ пробела \s:

\s-(?=[^ ]) 

Ниже приведен пример, чтобы проверить шаблон в JavaScript:

// expected: 
 

 
// "Author Name -Series 00 -Title.txt" -> 
 
// "Author Name - Series 00 - Title.txt" 
 

 
// "Author_Name -[Series 01] -Title -Genre.txt" -> 
 
// "Author_Name - [Series 01] - Title - Genre.txt" 
 

 
// "File_Name1 - Sometext- more-info (V1.0).txt" -> 
 
// no change 
 

 
var regex =/-(?=[^ ])/g; 
 
var texts = [ 
 
    "Author Name -Series 00 -Title.txt", 
 
    "Author_Name -[Series 01] -Title -Genre.txt", 
 
    "File_Name1 - Sometext- more-info (V1.0).txt" 
 
]; 
 

 
for(var i = 0; i < texts.length; i++) { 
 
    var text = texts[i]; 
 
    console.log(text, "->", text.replace(regex, ' - ')); 
 
}