gpt4 book ai didi

regex - PERL:如何在回车之外优雅地搜索/替换?

转载 作者:行者123 更新时间:2023-12-02 06:53:16 31 4
gpt4 key购买 nike

我在谷歌上搜索时遇到了麻烦,因为大多数人似乎都想知道如何删除回车。

我的代码有效,但看起来很笨拙,而且我遗漏了一些东西。可能是我的原始脚本设计不佳(我正在检查是否有一个元素最后出现,如果是,我需要更改它,)但仍然......似乎我缺少一种使事情更顺利的快速方法.

use strict;
use warnings;

my $a = "This is a string that I concatenate beforehand with carriage returns, so it's hard to separate out.\nThis is the last line I want to track.\nI want to delete this line.";
my $b = $a;

$b =~ s/(track\.).*/$1/g;

print "THIRD LINE STILL THERE\n$b\n\n";

my @c = split(/\n/, $a);
for (0..$#c) {
if ($c[$_] =~ /last line/) {
$b = join("\n", @c[0..$_]);
last;
}
}

print "THIRD LINE GONE. IT WORKS, BUT I THINK THERE MUST BE A BETTER WAY.\n$b\n";

最佳答案

您的代码中有一个很好的方法,只需要多一点——无需迭代。

这会从多行字符串中删除最后一行。

my @lines = split '\n', $line;
pop @lines;
my $text = join '\n', @lines;

pop从数组中删除最后一个元素。或者,如果您希望保持 @lines 完整

my @lines = split '\n', $line;
my $text = join '\n', @lines[0..$#lines-1];

请注意,如果文本的“最后”行本身以换行符结尾(因此,如果其后跟一个空行),split nicely 不会返回额外的元素,因为它会丢弃随后返回的列表中所有尾随的空字段。所以上面的代码保持不变。


请注意 Jonathan Leffler 的评论和 Alan Moore .来自后者

"Newline" is a generic term for anything that's used to separate lines, including linefeed (\n), carriage return(\r), a carriage return-linefeed pair (\r\n), and a few other, more exotic characters.

如果您要为每个标题寻找“回车”,或寻找其他形式的“换行符”,您需要调整 \n在上面的 splitjoin 中。例如,参见他们的 Representations on Wikipedia .

关于regex - PERL:如何在回车之外优雅地搜索/替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37715990/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com