如何使用regexp替换部分字符串?

Ana*_*hah 1 regex string perl replace

嗨,
我有一个看起来像的字符串

/dir/dir1/filename.txt
Run Code Online (Sandbox Code Playgroud)

我想用一些其他名称替换"filename.txt",使"/ dir/dir1"保持原样,所以在替换字符串之后会看起来像

/dir/dir1/newfilename.txt
Run Code Online (Sandbox Code Playgroud)

考虑到我不知道"filename"的值,我怎么能在Perl中使用RegExp呢?

非常感谢

PS:"filename.txt"和"newfilename.txt"用于在询问原始文件名不同的问题时使事情变得简单.

Ya.*_*man 11

我建议不要使用正则表达式来摆弄文件名/路径.目录分隔符,有效/无效字符因平台而异,可能是一个需要解决的问题.我建议你尝试File :: Spec来提取文件名,然后用你想要的任何东西替换它


nxa*_*adm 10

正则表达式是您的问题的错误工具.正则表达式很棒,大部分时间都在工作,但并不总是最干净(可读性)或最快的解决方案.

我建议使用经典的File :: Basename.与File :: Spec相比,File :: Basename是一个核心模块(无需安装!),并且非常易于使用:

    use File::Basename;

    my $basename = basename($fullname,@suffixlist);
    my $dirname  = dirname($fullname);
Run Code Online (Sandbox Code Playgroud)

我最喜欢的用途:

    my $filename = basename($path);
Run Code Online (Sandbox Code Playgroud)


Aln*_*tak 7

$filename =~ s%/[^/]*$%/newfilename.txt%;
Run Code Online (Sandbox Code Playgroud)
  • s%...%...%- %用作分隔符,因此您可以/在模式中使用
  • / - 匹配斜线
  • [^/]* - 以及任何不包含斜杠的字符串
  • $ - 直到字符串的结尾