我正在寻找构建一个正则表达式语句以始终删除字符串的前 3 行和字符串的最后 3 行(中间部分可以是任意 n 行内容)。任何干净的正则表达式方法来实现这个输出?(即总是去掉字符串的前 3 行和后 3 行 - 并保留中间部分,这可能是可变的行数)
谢谢。
例如
输入字符串:
"
1
2
3
<1...n # of lines content>
4
5
6
"
到所需的输出字符串:
"<1..n # of lines content>"
我正在寻找构建一个正则表达式语句以始终删除字符串的前 3 行和字符串的最后 3 行(中间部分可以是任意 n 行内容)。任何干净的正则表达式方法来实现这个输出?(即总是去掉字符串的前 3 行和后 3 行 - 并保留中间部分,这可能是可变的行数)
谢谢。
例如
输入字符串:
"
1
2
3
<1...n # of lines content>
4
5
6
"
到所需的输出字符串:
"<1..n # of lines content>"
之前给出的解决方案真的很复杂!所有一个需要是
s/^(?:.*\n){1,3}//;
s/(?:.*\n){1,3}\z//;
如果您想接受末尾缺少尾随换行符,可以使用
s/\n?\z/\n/;
s/^(?:.*\n){1,3}//;
s/(?:.*\n){1,3}\z//;
或者
s/^(?:.*\n){1,3}//;
s/(?:.*\n){0,2}.*\n?\z//;
这应该可以解决问题。您可能需要将“\n”替换为“\r\n”,具体取决于输入字符串的换行格式。无论最后一行是否以换行符终止,这都将起作用。
$input = '1
2
3
a
b
c
d
e
4
5
6';
$input =~ /^(?:.*\n){3} ((?:.*\n)*) (?:.*\n){2}(?:.+\n?|\n)$/x;
$output = $1;
print $output
输出:
a
b
c
d
e
for($teststring)
{
s/<.*?>//g;
$teststring =~ s%^(.*[\n\r]+){3}([.\n\r]).([\n\r]+){3}$%$2%;
print "Outputstring" . "\n" . $teststring . "\n";
}
您需要测试它是否低于 6 行等。