如何在perl中指定段落数

时间:2015-12-11 12:05:25

标签: regex perl

我想使用正则表达式查找perl中出现的新行数。 如何在perl中定义换行符的出现次数。

例如 我有包含

的文字
dog
cat
other 23 newlines
puppy
Kitten

我可以使用记事本Find "(dog)((?:.*[\r\n]+){25})(\w.*)"replace with "\1 = \3 \2"进行正则表达式 的修改

重要的是,如何从狗身上找到第25段的内容。 更简单的方法。 如何缩短此查找字符串

(dog)(.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+)(.*)

Perl中特定数量的新行的替代方法是什么?

错误发布在超级用户身上,现在已移到此处。

3 个答案:

答案 0 :(得分:2)

您可以在阅读输入时跳过这些行:

while (<>) {
    if (/dog/) {
        <> for 1 .. 24;
        print scalar <>;
    }
}

或者,如果整个字符串是输入,则可以使用非捕获组:

my ($puppy) = $string =~ /dog(?:.*\n){25}(.*)/;
print $puppy;

在正则表达式中,点与换行符不匹配(除非使用/s修饰符)。

答案 1 :(得分:1)

您可以使用tr///运算符(请参阅perlop)来计算单个字符的出现次数。

#!/usr/bin/perl
use warnings;
use strict;

my $string = 'dog
cat
other 23 newlines
puppy
Kitten';

print $string =~ tr/\n//, "\n";

输出:

4

答案 2 :(得分:0)

这是我想要的答案。

perl -i.bak -pe "BEGIN{undef $/;} s/(dog)(.*[\r\n]+){23}(.*)/$1 = $3/smg" 1.rtf