gpt4 book ai didi

regex - 如何在 Perl 替换中替换匹配项之前的所有文本?

转载 作者:行者123 更新时间:2023-12-01 13:08:33 24 4
gpt4 key购买 nike

我正在读取输入文件的每一行 (IN) 并将读取的行打印到输出文件 (OUT) 如果该行以其中一种模式开头,例如“ab”、“cd”、“ef”, “gh”、“ij”等。打印的行的格式为“pattern: 100”或“pattern: 100:200”。我需要用“myPattern”替换“pattern”,即将当前行打印到 FILE,但用“myPattern”替换第一次出现“:”之前的所有文本。做这个的最好方式是什么?

目前我有:

while ( <IN> )
{
print FILE if /^ab:|^bc:|^ef:|^gh:/;
}

我不确定替换 substr 是否有帮助,因为“pattern”可以是“ab”或“cd”或“ef”或“gh”等。

谢谢!毕

最佳答案

一般来说,这样做是这样的:

my %subst = ( 'ab' => 'newab', 'bc' => 'newbc', 'xy' => 'newxy' );
my $regex = join( '|', map quotemeta, sort { length($b) <=> length($a) } keys %subst );
$regex = qr/^($regex):/;

while ( <IN> ) {
print FILE if s/$regex/$subst{$1}:/;
}

排序将最长的放在第一位,因此如果数据有 ab::并且 ab 和 ab: 都被替换,则使用 ab: 代替 ab。

关于regex - 如何在 Perl 替换中替换匹配项之前的所有文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/998193/

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