avatar
一个Perl 匹配问题# Programming - 葵花宝典
L*r
1
对下列文本逐行处理,
主要目标是把 括号里包含有NN/JJ/NNS/VP的短语提取出来,存到一个数组里。
比如这行"(NP (JJ extreme) (NN fire) (NN threat)))"
要求处理后的数组为
@array==("(JJ extreme)","(NN fire)","(NN threat)")
我用
my $content_ALL = '.*(\(NNPS\s.+\)|\(NNP\s.+\)|\(NNS\s.+\)|\(NN\s.+\)|\(JJR\
s.+\)|\(JJS\s.+\)|\(JJ\s.+\)|\(VBZ\s.+\)|\(VBD\s.+\)|\(VBG\s.+\)|\(VBN\s.+\)
|\(VBP\s.+\)|\(VB\s.+\)|\(RBS\s.+\)|\(RBR\s.+\)|\(RB\s.+\))';
my @myp = $line =~/$content_ALL/g;
可是根本得不到要的效果。
谁给个方子?谢谢
(ROOT
(S
(NP
(NP (NNS Scores))
(PP (IN of)
avatar
w*p
2
this should work:
test.pl:
my $input = '(NP (JJ extreme) (NN fire) (NN threat)))';
my @result = $input =~ /(\(JJ[^)]*\))|(\(NN[^)]*\))/g;
map { print "$_\n" if $_ } @result;
$ perl test.pl
(JJ extreme)
(NN fire)
(NN threat)
avatar
L*r
3
thanks.

【在 w******p 的大作中提到】
: this should work:
: test.pl:
: my $input = '(NP (JJ extreme) (NN fire) (NN threat)))';
: my @result = $input =~ /(\(JJ[^)]*\))|(\(NN[^)]*\))/g;
: map { print "$_\n" if $_ } @result;
: $ perl test.pl
: (JJ extreme)
: (NN fire)
: (NN threat)

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。