Regex 打印在perl正则表达式后收集的名称
好的,我需要使用perl在一个txt文件中收集人名,我可以找到人名并用name:front使用正则表达式打印出来,但是我需要使用正则表达式收集我想要的人名,因为每个文件中有多个不同的人名要收集 文件输入示例: NAME: Bigelow, Patrick R DATE: 28 Apr 2014Regex 打印在perl正则表达式后收集的名称,regex,perl,Regex,Perl,好的,我需要使用perl在一个txt文件中收集人名,我可以找到人名并用name:front使用正则表达式打印出来,但是我需要使用正则表达式收集我想要的人名,因为每个文件中有多个不同的人名要收集 文件输入示例: NAME: Bigelow, Patrick R DATE: 28 Apr 2014 最好使用两行代码,一行用于剥离名称(介于名称:…日期:之间),然后拆分名称以获得逗号 my ($tmp) = /(
最好使用两行代码,一行用于剥离名称(介于
名称:…日期:
之间),然后拆分名称以获得逗号
my ($tmp) = /(?<=NAME: )(.*?)(?=\s+DATE:)/g or next;
my @arr = split(/,\s+/, $tmp);
my($tmp)=/(?您可以使用s/regex/replace/
来做您想做的事情。我避免使用后期修复循环(添加更多行时容易错过,修复起来很痛苦)和使用$\uuu
(不会提高可读性,实现不稳定,并且是全局范围):
在本例中,使用lookahead和lookahead是多余的,因为您有一个显式的捕获块。此外,不需要/g标志。这段代码看起来很棒,但其中有一些功能我没有,AutoDie就是其中之一。但问题是,这是否会限制我以后在代码中获取日期l?您使用的是什么版本的Perl?Autodie从5.12开始就存在,并且从5.10开始就有了功能qw(比如说)
。其他一切都应该可以。如果您是5.10之前的版本,请使用打印
(不要忘记\n
)并使用打开…或死qq(…);
语法检查的返回。
my ($tmp) = /(?<=NAME: )(.*?)(?=\s+DATE:)/g or next;
my @arr = split(/,\s+/, $tmp);
use strict;
use strict;
use warnings;
use autodie;
use feature qw(say);
use constant {
TEXT_FILE => 'file.txt',
NAME_LINE => qr/^NAME:\s+/,
};
open my $name_fh, "<", TEXT_FILE; # Autodie eliminates need for testing if this worked
while ( my $line = <DATA> ) {
chomp $line;
next unless $line =~ NAME_LINE; # Skip lines if they don't contain name
( my $name = $line ) =~ s/NAME:\s+(.+?)\s+DATE.*/$1/;
say qq("$name");
}
close $name_fh;
print join ": ", @foo . "\n"; # Doesn't work.
say join ": ", @foo; # This works fine.