I’m trying to rename a bunch of files by removing all parenthetical from the file name EXCEPT if they contain a specific word.
For instance, say these are my files:
- File 1 (Boop) (Ver 1).file
- File 1 (Beep) (Ver 2).file
- File 2 (Soup).file
- Another File (Seep).file
- Yet Another (Ver 5).file
I want to KEEP any parenthetical with “Ver” and a number, but I want the rest gone.
So it should look like:
- File 1 (Ver 1).file
- File 1 (Ver 2).file
- File 2.file
- Another File.file
- Yet Another (Ver 5).file
I can write \(.*\)
for Find and leave Replace blank to get rid of anything parenthetical, and it works great.
So I tried \((?!Ver).*\)
and a bunch of alternatives, but it gives me the same result of just removing all parentheticals (even the ones I want). I have tried lookaheads, lookbehinds, and a bunch of syntax tweaks, but I always either end up with no parentheticals or all of them.
Any suggestions?
Edit: I got it working (kinda). I couldn’t make it work with the wildcard thing, but after changing it to \((?!Ver)\w+\)
, it did work except if there were more parenthetical after. Like if it was “File (Ver 9) (Extra Junk).file”, then it would just leave it untouched. So I had to use a combo of two expressions to clean up the rest.
I think you want something like
\s*\(((?!ver\s\d).)*\)\s*
See regexr.com/7jbvk
Basically this consumes all characters between parentheticals with whitespace unless the next character set in the parentheticals is
ver
followed by a number. Now this uses a negative lookahead which might not be supported by the engine that krename is using. You can also explicitly construct the group to not match, but that’s rather painful, see here