所以我是Perl的新手并编写了一个脚本,该脚本可以读取CSV文件中的行,并重命名与该CSV文件中某个列关联的文件目录。
my $filename_formatted = "$row->[3]"."_"."$row->[4]"."_"."$row->[2]\n";
my $resume_id = $row->[1];
if (-e $resume_id){
rename($resume_id, $filename_formatted);
}
基本上,我如何格式化$resume_id
以仅接受文件扩展名之外的内容? $row->[1]
变量包含类似“resume_1231.pdf”或“resume_1231.doc”的内容。我基本上希望一切都达到.
我知道我可能需要一个正则表达式,但是,我从未在Perl中使用它。
$formatted_resume_id = /($row->[1])?!\..*$/
我不知道。
答案 0 :(得分:0)
$row->[1]
变量包含类似“resume_1231.pdf”或“resume_1231.doc”的内容。我基本上希望所有内容都达到
.
尝试捕获组。
^([^.]*)
或使用懒惰方式。
^(.*?)\.
示例代码:
$mystring = "resume_1231.pdf";
if($mystring =~ m/^([^.]*)/) {
print "The file name is $1";
}
答案 1 :(得分:0)
我想你会希望一切都到文件名中的最后一个点(所以即使文件名包含点,你也会获得全名)。
这样的事情应该这样做:
if ( $row->[1] =~ /(.*)\./ ) {
$formatted_resume_id = $1;
}
答案 2 :(得分:0)
所以答案显然是这样,
my $resume_file = "bogus_filename.doc";
my ($name) = $resume_file =~ /(.+?)(\.[^.]*$|$)/;
my($ext) = $resume_file =~ /(\.[^.]+)$/;
这将考虑任何额外的时期,因为它只接受最后一个时期。
我仍然不确定这是如何工作的,所以如果有人能打破第一个正则表达式,那就太好了。我理解(。+?)但是我很遗憾该正则表达式的第二部分意味着不包括扩展名。