2014-10-01 68 views
1

我对于正则表达式相当陌生,现在我可以写表达式来完成最简单的文件重命名作业,但是这个被我卡住了。正则表达式来更改文件名删除器

我只是想改变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“ - ”分隔符,并且必须忽略所有其他连字符,例如“ - ”“ - ”和现有的“ - ”都应该被忽略。例如:

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

它用于Python中的文件重命名器。

+2

[替换'“ - (?! )“g' with'” - “'](http://regex101.com/r/sB8rU3/1)? – Sam 2014-10-01 21:28:26

+0

工作原理在文件重命名器中有一些未知的原因,它也为现有的” - “增加了额外的空间,但是我可以很容易地删除它们,所以没有麻烦。谢谢。 – Zarnia 2014-10-02 17:10:42

回答

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, ' - ')); 
 
}