我有一个值为Validation_File_2_3.45.2017.csv
的字符串。
在这种情况下如何使用正则表达式提取第一个数字2?
我已经尝试过表达式($Filedigit) = ($Filename =~ m/^[0-9]/g)
,但它不起作用
答案 0 :(得分:0)
在评论中,你说你试过这个:
($Filedigit)= ($Filename =~ m/^[0-9]/g);
有几件事。在继续编写脚本之前,您应始终检查匹配是否成功,特别是在尝试捕获时。接下来,^
从字符串的开头看,然后立即在全局范围内查找单个数字0-9
。除非您有2_blah.csv
这样的文件名,否则这将不匹配。但是,您实际上并没有尝试捕获任何内容,因此如果您碰巧匹配某个条目,$Filedigit
将在所有情况下都为1
(表示发生了匹配)。
这是一个做你想做的事的例子:
use warnings;
use strict;
my $str = 'Validation_File_2_3.45.2017.csv';
# confirm there's a match
if (my ($num) = $str =~ /^.*?(\d+)/){
print "$num\n";
}
else {
print "no match\n";
}
正则表达式的解释:
^ - start from beginning of string
.*? - anything, non-greedy
( - begin capture
\d+ - any number of contiguous digit chars
) - end capture
因此,它从字符串的开头开始,在第一组连续数字之前扔掉任何东西并捕获它们并将其放入变量中。
请参阅perlreftut和perlre。