Regex 如何编写一个perl脚本,用特定的模式计算行数并打印它?
我正在尝试编写一个脚本,其中只有第一个字段具有相同的模式时才会变灰。我想把数字相同的行grep三次。请看下面。谢谢大家Regex 如何编写一个perl脚本,用特定的模式计算行数并打印它?,regex,perl,Regex,Perl,我正在尝试编写一个脚本,其中只有第一个字段具有相同的模式时才会变灰。我想把数字相同的行grep三次。请看下面。谢谢大家 1 Cat 1 Dog 1 Mouse 2 Cat 3 Cat 3 Dog 4 Cat 4 Dog 4 Mouse 输出应如下所示: 1 Cat 1 Dog 1 Mouse 4 Cat 4 Dog 4 Mouse 首先在整个文件中含糊其词会更容易 # (?m)^(\
1 Cat
1 Dog
1 Mouse
2 Cat
3 Cat
3 Dog
4 Cat
4 Dog
4 Mouse
输出应如下所示:
1 Cat
1 Dog
1 Mouse
4 Cat
4 Dog
4 Mouse
首先在整个文件中含糊其词会更容易
# (?m)^(\d+)(?!\d).*\s*(?:^\1(?!\d).*\s*){2}
(?m)
^
( \d+ ) (?! \d )
.* \s*
(?:
^
\1 (?! \d )
.* \s*
){2}
Perl测试用例
$/ = undef;
$str = <DATA>;
while ( $str =~ /(?m)^(\d+)(?!\d).*\s*(?:^\1(?!\d).*\s*){2}/g)
{
print "Matched:\n$&\n";
}
__DATA__
1 Cat
1 Dog
1 Mouse
2 Cat
3 Cat
3 Dog
4 Cat
4 Dog
4 Mouse
如果您的数据如所述(即具有相同编号的行是连续的,并且每行后面有两个换行符),则可以执行以下操作:
while ($data =~ /^(([0-9]++).*(?:\R\R\2 .*){2})/mg) {
$_ .= $1 . "\n\n";
}
chomp;
print;
到目前为止,你尝试了什么?到目前为止你读了什么,你在哪里寻找答案,应该在谷歌搜索的第一个或第二个结果中找到。输入排序了吗?也就是说,我们能期望具有相同前缀的行始终相邻吗?另外,三是你在现实生活中需要的一个代表性数字吗(而不是说,数百万行)?我有一个问题,在我的问题中,一个是“1\n”,然后是“11\n”,然后是“1\n”,等等。。匹配(因为。*)。迫使我加入丑陋的前瞻。@sln:好的,我会加入空格和所有格量词。是的,比断言快。
while ($data =~ /^(([0-9]++).*(?:\R\R\2 .*){2})/mg) {
$_ .= $1 . "\n\n";
}
chomp;
print;