如何从Perl中的字符串中提取数字?

Laz*_*zer 10 perl

我有

print $str;
abcd*%1234$sdfsd..#d
Run Code Online (Sandbox Code Playgroud)

该字符串将始终只有一个连续的数字段,就像1234在这种情况下一样.休息全部将是字母或其他特殊字符.

如何提取数字(1234在这种情况下)并将其存回str

这个页面暗示我应该使用\d,但是怎么样?

FMc*_*FMc 29

如果您不想修改原始字符串,可以使用子模式通过在正则表达式中捕获它们来提取数字.在列表上下文中,正则表达式返回子模式中定义的匹配项.

my $str = 'abc 123 x456xy 789foo';

my ($first_num) = $str =~ /(\d+)/;   # 123
my @all_nums    = $str =~ /(\d+)/g;  # (123, 456, 789)
Run Code Online (Sandbox Code Playgroud)


Phi*_*ter 18

$str =~ s/\D//g;
Run Code Online (Sandbox Code Playgroud)

这将从字符串中删除所有非数字字符.这就是你需要做的一切.

编辑:如果其他脚本中的Unicode数字可能存在,更好的解决方案是:

$str =~ s/[^0-9]//g;
Run Code Online (Sandbox Code Playgroud)

  • Lazer 要求的是一个数字,而不仅仅是一个整数。此正则表达式将删除可用于形成浮点数的 `.`、`e`。此外,`\d` 不仅仅是 `[0-9]`,因为 Perl 支持 Unicode:其他字形(例如印度语)中的数字是有效的。所以你的正则表达式也将接受不是数字的字符串。 (2认同)