解析CSV文件时排除文件扩展名

时间:2014-07-21 21:06:49

标签: regex perl csv

所以我是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])?!\..*$/

我不知道。

3 个答案:

答案 0 :(得分:0)

  

$row->[1]变量包含类似“resume_1231.pdf”或“resume_1231.doc”的内容。

     

我基本上希望所有内容都达到.

尝试捕获组。

^([^.]*)

Live demo

或使用懒惰方式。

^(.*?)\.

示例代码:

$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 =~  /(\.[^.]+)$/;

这将考虑任何额外的时期,因为它只接受最后一个时期。

我仍然不确定这是如何工作的,所以如果有人能打破第一个正则表达式,那就太好了。我理解(。+?)但是我很遗憾该正则表达式的第二部分意味着不包括扩展名。