【发布时间】:2016-10-20 17:33:29
【问题描述】:
我有一个文本文件,我们称之为 file1.txt:
cats
and
dogs
are
running
around
|
john
loves
mary
|
I
am
swimming
|
我正在尝试构建一个程序,该程序会查找以“ing”结尾的单词并将 CC 打印在同一文件或不同的 output.txt 文件中。
期望的输出
cats
and
dogs
are
running CC
around
|
john
loves
mary
|
I
am
swimming CC
|
我浏览了论坛中的可用文章并尝试构建以下代码,但是它给了我一个任意结果,每个单词后跟“CC”。
use warnings;
use strict;
my $file = 'file1.txt';
open(my $word_fh,"file1.txt") or die "Couldn't open file file1.txt, $!";
my %word_match = map {chomp $_; $_ => 0} <$word_fh>;
close $word_fh;
open my $fh, '<', $file or die $!;
while (<$fh>){
chomp;
my @words_in_line = split;
for my $word (@words_in_line){
$word =~ /ing$/;
$word .= ' CC' if exists $word_match{$word};
print " $word\n";
}
}
我得到的输出是这样的:
cats CC
and CC
dogs CC
are CC
running CC
around CC
| CC
john CC
loves CC
mary CC
| CC
I CC
am CC
swimming
| CC
我知道我做错了什么。任何提示或建议将不胜感激。提前致谢!
【问题讨论】:
-
直截了当:
\w+ing\b- 用$0 CC替换那些,你就完成了。\w+确保字母在前面,\b是单词边界。 -
取消注释
use strict和use warnings。你会看到你错过了word_match第23行(你添加了一个's'),并且你使用了两次$w_fh而不是$word_fh..(虽然这不是你问题的解决方案,但你仍然应该这样做) -
您显示的代码不会产生您所说的输出。如果您希望我们帮助您,请出示您的真实代码,尤其是永远不要注释掉
use strict和use warnings
标签: regex perl pattern-matching