我有以下字符串Today, the sky is blue.
,我想用它做两件事。
首先,我想把它变成以下数组(或哈希,不确定哪一个是正确的数组)。
Today
,
the
sky
is
blue
.
我可以使用这个grep grep -Eo '\w+|[^\w ]' input.txt
来完成它,但有人可以告诉我如何使用perl来执行此操作(例如,为了将其作为脚本的一部分运行)。
第二件事,我想在我的阵列的每一行添加行号(我知道它在某处,但我想实际看到它),导致以下最终输出:< / p>
Today 1
, 2
3
the 4
5
sky 6
7
is 8
9
blue 10
. 11
有人可以帮我在perlish上下文中使用grep函数并打印相应的行号吗?非常感谢提前!
答案 0 :(得分:3)
这是一种完成工作的方法:
my $text = "Today, the sky is blue.";
my @list = split/(\W)/, $text;
my $i = 1;
for (@list) {
say $_,"\t",$i++ if $_ ne '';
}
<强>输出:强>
Today 1
, 2
3
the 4
5
sky 6
7
is 8
9
blue 10
. 11
答案 1 :(得分:1)
为了匹配Perl中的正则表达式,你有匹配的运算符,你会在PerlRegex tutorial找到很多关于它的例子和解释。
所以你会重用这样的正则表达式;在这里我将结果放入一个包含匹配项的数组中。任何后处理都应该应用于此数组。在这里,我只是输出它。
关于你的正则表达式的另一个细节 - 如果我这样做,使用你给的正则表达式
echo "Today, the sky is blue." | grep -Eo '\w+|[^\w ]'
输出结果为:
Today
,
the
sky
is
blue
.
这是因为您的否定字符类[^\w ]
不仅排除了字母数字字符,还排除了空格。
但是,根据您的输出,您可能在此处[^\w]
,因此不属于\w
的空格被视为匹配。所以我也在这里使用这个正则表达式。顺便说一下:我想知道,如果你真的希望每个非单词字符都是自己的匹配。
#!/usr/bin/perl
#
use strict;
use warnings;
while (<DATA>)
{
my (@matches) = $_ =~ m/(\w+|[^\w])/g;
print join("\n", @matches);
}
__DATA__
Today, the sky is blue.