如何在Perl中提取此文件名的部分内容?

时间:2010-02-23 12:36:16

标签: regex perl

在包含Changeset列的Excel工作表中,我得到的变更集如下:

C:\ccviews\hgdasdff-9302\dfcsz\ahgrt\kjhssl\ASGHLS@@\main\ajsdkljlat\hahdasdhfk\1\test.txt\sub\hsdaklfl\3

我需要在Perl脚本中使用split函数,这样就会有两个输出(输入为上面的字符串)

  • @@之前的部分(例如此处C:\ccviews\hgdasdff-9302\dfcsz\ahgrt\kjhssl\ASGHLS
  • 字符串的最后一个字符(例如,此处为3)

4 个答案:

答案 0 :(得分:6)

对于常规分割来说这听起来太复杂了,你需要像这样的普通正则表达式:

my ($first, $second) = / ^ (.+?) @@ .* (.) $ /x;

答案 1 :(得分:3)

Mark Dominus的Regular Expression Mastery

  

兰德尔的规则

           
    

当您知道要保留的内容时,请使用捕获或m//g

         

当您知道要丢弃的内容时,请使用split

  
     

Randal Schwartz

您知道要保留的内容,因此请使用Leon Timmermans's answer中的m//g

答案 2 :(得分:2)

我认为这是你想要的,还是你需要一个声明?

 my ($before, $after) = split '@@', $input;
 my $last_char = substr($after, -1, 1);

答案 3 :(得分:0)

已添加两个答案,您可以仅使用拆分功能尝试以下操作:

$s = 'C:\ccviews\hgdasdff-9302\dfcsz\ahgrt\kjhssl\ASGHLS@@\main\ajsdkljlat\hahdasdhfk\1\test.txt\sub\hsdaklfl\3';

@temp = split/@@/,$s;
$part1 = $temp[0]; # C:\ccviews\hgdasdff-9302\dfcsz\ahgrt\kjhssl\ASGHLS

@temp = split//,$s;
$part2 = $temp[-1]; # 3