在Perl中缩短字符串?(简单)
我有一个字符串:在Perl中缩短字符串?(简单),perl,string,Perl,String,我有一个字符串: $path = "C:/Users/user1/tools/test_folder/TEST1_HHH.123" 如何让Perl只打印字符串的TEST1部分 2011年3月15日增补- 如果不是TEST1_HHH.123,而是TEST1_2_HHH.123和我想要在_HHH.123之前的所有内容,该怎么办?这是我想要去除的唯一常量,也是路径的另一部分。谢谢–这很简单,便于携带: use File::Basename qw( basename ); my ($word) = b
$path = "C:/Users/user1/tools/test_folder/TEST1_HHH.123"
如何让Perl只打印字符串的TEST1部分
2011年3月15日增补-
如果不是TEST1_HHH.123,而是TEST1_2_HHH.123和我想要在_HHH.123之前的所有内容,该怎么办?这是我想要去除的唯一常量,也是路径的另一部分。谢谢–这很简单,便于携带:
use File::Basename qw( basename );
my ($word) = basename($path) =~ /^([^_]+)/;
这很简单,便于携带:
use File::Basename qw( basename );
my ($word) = basename($path) =~ /^([^_]+)/;
我的@test=;-我不认为这是你认为的那样。另外,您在第4行忘记了一个分号。由于它是一个文件路径,因此即使在Windows中,上述内容也不可移植,因为路径很容易是C:\Foo\Bar\Bazmy@test=;-我不认为这是你认为的那样。另外,您在第4行忘记了一个分号。因为这是一个文件路径,所以上面的内容不可移植,即使在Windows中也是如此,因为路径很容易是C:\Foo\Bar\baz如果不是TEST1_HHH.123,而是TEST1_2_HHH.123的文件名,我希望所有内容都在_HHH.123之前呢?这是我想要去除的唯一常量,也是路径的另一部分。THanks@dewalla,/^.*_HHH\.123\z/只有当字符串是perl运行的操作系统上的路径时,它才是可移植的。如果您的代码在Vax上运行时字符串为C:/Users/user1/tools/test\u folder/TEST1\u HHH.123,您将无法得到想要的结果。@Chas。欧文斯,是的,这就是便携式的定义。我没有说它可以处理来自任何系统的路径。Path::Class是您想要的,而不是TEST1_HHH.123,如果TEST1_2_HHH.123和我想要在_HHH.123之前的所有内容,则文件名是what if?这是我想要去除的唯一常量,也是路径的另一部分。THanks@dewalla,/^.*_HHH\.123\z/只有当字符串是perl运行的操作系统上的路径时,它才是可移植的。如果您的代码在Vax上运行时字符串为C:/Users/user1/tools/test\u folder/TEST1\u HHH.123,您将无法得到想要的结果。@Chas。欧文斯,是的,这就是便携式的定义。我没有说它可以处理来自任何系统的路径。类就是您想要的
if ( $path =~ /.*\/(([^\/]*)_([^\/]*))$/ )
{
my $file = $1; # TEST1_HHH.123
my $name = $2; # TEST1
my $suff = $3; # HHH.123
}