digitalmars.D.learn - Regex replace followed by number.
- Taylor Hillegeist (61/61) Jun 01 2016 So I have ran into an issue where I want to replace a string with
So I have ran into an issue where I want to replace a string with regex. but i cant figure out how to replace items followed by a number. i use "$1001" to do paste first match but this thinks I'm trying using match 1001 but if i try ${1}001 it gives me an error saying that it cant match the other "}" perhaps D uses a different syntax but i couldn't find any documentation on the replace side. The following code renames files. arg 1 - path arg 2 - regex match arg 3 - regex replace ---------------------- import std.file; import std.path; import std.regex; import std.range; import std.stdio:writeln; void main(string[] args){ bool preview; Regex!char myreg; string replacment; if(!args[1].buildNormalizedPath.isValidPath){writeln("Path is invalid! "); return;} try{myreg = regex(args[2]);} catch(RegexException e) {writeln("Invalid Regex command");return;} try{replacment = args[3];} catch(Exception e) {writeln("Needs replacment string");return;} if(args.length < 5){ preview = true; writeln("result is preview only add extra arg for action"); }else{preview = false;} size_t longest=0; foreach (string name; dirEntries(buildNormalizedPath(args[1].driveName(),args[1].stripDrive()) , SpanMode.shallow)) { if(name.isFile){ longest = (longest>name.baseName.length) ? longest : name.length; } } foreach (string name; dirEntries(buildNormalizedPath(args[1].driveName(),args[1].stripDrive()) , SpanMode.shallow)) { if(name.isFile){ if(preview){ writeln("From:",name.baseName," ".repeat(longest-name.baseName.length).join,"to:",replaceAll(name.baseName, myreg,replacment )); }else{ std.file.rename(name,replaceAll(name, myreg,replacment )); } } } } -----------------------------------------
Jun 01 2016