【发布时间】:2019-12-22 05:35:55
【问题描述】:
我想从文件路径中获取日期部分,以便在文件名中使用它们。例如,文件可能采用以下格式:
$file1 = "/mypath/sd-urt7-dfc-adfj345h-d0-79week48a-DFC-lk-my.text"
$file2 = "/mypath/sd-urt7-afd-parent-79week46d-AFD-lk-my.text"
$file3 = "/mypath/sd-urt7-ert-parent-79week50c-ERT-lk-my.text"
无论上面的文件名格式如何,其中都有一部分格式为“79weekxxX”,其中 xx 是周数,X 是字母。我想从每个字符串名称中获取“weekxxxX”部分,以便仅使用此字符串创建最终文件名。例如,如果我的文件是$file1,那么我想将它存储在另一个变量中,例如包含week48a 的week,并创建另一个名为$filename="$week.txt" 的变量。
我认为可以使用正则表达式匹配来做到这一点,但我不太确定如何。如果我的问题的任何部分仍不清楚,请告诉我,以便我进一步详细说明。谢谢。
编辑: “79week”一直存在。确切地说,我不会将它们作为带有文件名的变量来访问。路径是其自己对应键的嵌套哈希值。那么这样做是否可行:
my %hash = (
"rev" => {
"first" => "$filepath1",
"second" => "$filepath2",
"third" => "$filepath3"
},
"for" => {
"first" => "$filepath1_2",
"second" => "$filepath2_2",
"third" => "$filepath3_2"
}
);
foreach my $inner (keys %{$hash{$outer}}){
my $file = basename($inner); //only takes the file name, and ignores the rest of the path
my ($week) = $file =~ /79week(\d\d)([a-zA-Z])/;
$filename = "$week.txt";
}
【问题讨论】:
-
79和week是否一直存在?如果是这样,相当容易做到/79week(\d\d)([a-zA-Z])/Demo -
@dawg 请检查帖子编辑
-
my ($week) = $file1 =~ /-[0-9]{2}(week[0-9]{2}[a-zA-Z])-/;