Perl 以 (312) 555-1212 格式匹配并提取 phone 数字
Perl match and extract phone number with (312) 555-1212 format
试图让 perl 识别并提取文件中具有某种奇怪格式的字符串中的 phone 数字:
my $str = 'Phone:
(312) 555-1212 _
';
我试过这个解决方案,但它最终从字符串中提取了所有数字:
my @all_nums = $element =~ /(\d+)/g;
if (@all_nums) {
my $ph = join('-', @all_nums);
print "PHONE NO: $ph\n";
push(@elements_found, $ph);
}
非常感谢任何帮助。
为数字格式尝试更精确的正则表达式:
my @all_nums = $element =~ /\((\d+)\) (\d+)-(\d+)/g;
if (@all_nums) {
my $ph = join('-', , , );
print "PHONE NO: $ph\n";
push(@elements_found, $ph);
}
下面的演示代码片段逐行读取 DATA 块并提取 phone(如果行中存在),否则跳至读取下一行。如果在该行中找到 phone 数字,则将其打印在屏幕上。
use strict;
use warnings;
use feature 'say';
my $re = qr/(\(\d{3}\) \d{3}\-\d{4})/;
while( <DATA> ) {
next unless /$re/;
say "-- --";
}
__DATA__
Phone:
(312) 555-1212 _
Call customer service at (328) 371-9302 for an assistance
输出
-- (312) 555-1212 --
-- (328) 371-9302 --
以下代码示例将 DATA 块读取到变量 $data
中,然后借助 正则表达式 提取所有 phone 将数字放入数组 @phones
,然后将它们打印在屏幕上。
use strict;
use warnings;
use feature 'say';
my $re = qr/(\(\d{3}\) \d{3}\-\d{4})/;
my $data = do { local $/; <DATA>; };
my @phones = $data =~ /$re/g;
say for @phones;
__DATA__
Phone:
(312) 555-1212 _
Call customer service at (328) 371-9302 for an assistance
输出
(312) 555-1212
(328) 371-9302
注意:验证 phone 数字的任务比这些代码示例中演示的更复杂
试图让 perl 识别并提取文件中具有某种奇怪格式的字符串中的 phone 数字:
my $str = 'Phone:
(312) 555-1212 _
';
我试过这个解决方案,但它最终从字符串中提取了所有数字:
my @all_nums = $element =~ /(\d+)/g;
if (@all_nums) {
my $ph = join('-', @all_nums);
print "PHONE NO: $ph\n";
push(@elements_found, $ph);
}
非常感谢任何帮助。
为数字格式尝试更精确的正则表达式:
my @all_nums = $element =~ /\((\d+)\) (\d+)-(\d+)/g;
if (@all_nums) {
my $ph = join('-', , , );
print "PHONE NO: $ph\n";
push(@elements_found, $ph);
}
下面的演示代码片段逐行读取 DATA 块并提取 phone(如果行中存在),否则跳至读取下一行。如果在该行中找到 phone 数字,则将其打印在屏幕上。
use strict;
use warnings;
use feature 'say';
my $re = qr/(\(\d{3}\) \d{3}\-\d{4})/;
while( <DATA> ) {
next unless /$re/;
say "-- --";
}
__DATA__
Phone:
(312) 555-1212 _
Call customer service at (328) 371-9302 for an assistance
输出
-- (312) 555-1212 --
-- (328) 371-9302 --
以下代码示例将 DATA 块读取到变量 $data
中,然后借助 正则表达式 提取所有 phone 将数字放入数组 @phones
,然后将它们打印在屏幕上。
use strict;
use warnings;
use feature 'say';
my $re = qr/(\(\d{3}\) \d{3}\-\d{4})/;
my $data = do { local $/; <DATA>; };
my @phones = $data =~ /$re/g;
say for @phones;
__DATA__
Phone:
(312) 555-1212 _
Call customer service at (328) 371-9302 for an assistance
输出
(312) 555-1212
(328) 371-9302
注意:验证 phone 数字的任务比这些代码示例中演示的更复杂