我有相同行数的列表(多行文本字符串)(项目的顺序可能在很多方面有所不同,但行数可能不同):
Ardei
Mere
Pere
Ardei
Castraveti
我想找到包含“ Ardei ”的匹配行的第2次,并将项目名称替换为其他名称,并在另一个正则表达式中单独找到<强烈>第一次出现' Ardei '并用其他名称替换名称(perl)。
答案 0 :(得分:1)
假设您要将{ nd "Ardei"
替换为"XYZ"
。你可以这样做(PCRE语法):
^(?s)(.*?Ardei.*?)Ardei
并将其替换为:
$1XYZ
$1
包含(.*?Ardei.*?)
中捕获的所有内容,而(?s)
会导致.
真正匹配每个字符(也包括换行符)。
一个小小的演示:
#!/usr/bin/perl -w
my $text = 'Ardei
Mere
Pere
Ardei
Castraveti
Ardei';
$text =~ s/^(?s)(.*?Ardei.*?)Ardei/$1XYZ/;
# or just: $text =~ s/^(.*?Ardei.*?)Ardei/$1XYZ/s;
print $text;
将打印:
Ardei Mere Pere XYZ Castraveti Ardei
答案 1 :(得分:0)
Ardei[\W\w]*?(Ardei)
将完全匹配第二个“Ardei”的\ 1,因此您可以使用它来完全替换第二个实例。