如何在保持资本化的同时替换文本?

duc*_*thd 8 regex string perl replace

假设我想在具有以下内容的文件上替换字符串

name
nAmE
naMEbb
NAME
Run Code Online (Sandbox Code Playgroud)

并希望用"dave"替换"name"这个词,但保留原始文本的大小写.例如,我想要的输出是,

dave
dAvE
daVEbb
DAVE
Run Code Online (Sandbox Code Playgroud)

是否有任何单行代码(最好是在Perl中,所以我可以在许多文件中进行就地替换)?

编辑 除非两个字符串具有完全相同的长度,否则问题是不明确的.我们假设它确实如此.

mMo*_*ntu 8

perlFaq上有一些解决方案:http://perldoc.perl.org/perlfaq6.html#How-do-I-substitute-case-insensitively-on-the-LHS-while-preserving-case-on-the-RHS ?

其中一个解决方案允许通过定义子例程(preserve_case)在单行中执行替换:

   $string = "this is a TEsT case";
   $string =~ s/(test)/preserve_case($1, "success")/egi;
   print "$string\n";
Run Code Online (Sandbox Code Playgroud)

这打印:这是一个SUcCESS案例