Как извлечь число из строки в Perl?
Я
print $str;
abcd*%1234$sdfsd..#d
строка всегда будет иметь только один непрерывный отрезок чисел, например 1234
в этом случае. Остальные все будут либо алфавитами, либо другими специальными символами.
как я могу извлечь номер (1234
в этом случае) и сохраните его обратно в str
?
на этой странице предлагает мне использовать d
, но как?
4 ответов
$str =~ s/\D//g;
это удаляет все символы nondigit из строки. Это все, что вам нужно сделать.
EDIT: если цифры Unicode в других сценариях могут присутствовать, лучшим решением является:
$str =~ s/[^0-9]//g;
Если вы не хотите изменять исходную строку, вы можете извлечь числа, захватив их в регулярном выражении с помощью подзаголовков. В контексте списка регулярное выражение возвращает совпадения, определенные в подзаголовках.
my $str = 'abc 123 x456xy 789foo';
my ($first_num) = $str =~ /(\d+)/; # 123
my @all_nums = $str =~ /(\d+)/g; # (123, 456, 789)
если вы хотите сделать это разрушительным способом, это самый быстрый способ сделать это.
$str =~ tr/0-9//cd;
tr
anslate все символы c
omplement из 0-9
ни к чему,d
elete их.
одно предостережение к этому подходу и Филиппа Поттера заключается в том, что если бы была другая группа цифр дальше по строке, они были бы объединены с первой группой цифр. Так что не ясно, что вы хотели бы сделать это.
самый верный способ получить одну и только одну группу цифр
( $str ) = $str =~ /(\d+)/;
совпадение в контексте списка возвращает список захватов. Родители вокруг $str
просто поместить выражение в контекст списка и назначить первый захват $str
.
лично я бы сделал так:
$s =~ /([0-9]+)/;
print ;
$1 будет содержать первую группу, соответствующую заданному регулярному выражению (часть в круглых скобках).