与更换一个新的多的话(replace many words with a new one)

2019-10-18 04:04发布

我有以下字符串:

猫狗狐狸catepillar熊狡猾

我需要更换“猫”和“狐狸”从这句话中,以“动物”字的话

我做到以下几点:

$Str1="cat";
$Str2="fox";
$NewStr="animal";

open(F1, "<$inputFile") or die "Error: $!";
open(F2, ">$outputFile") or die "Error: $!";

while ($line = <F1>) {
     $line =~ s/$Str1|$Str2/NewStr/g;
     print F2 "$line";

}

但问题是Word的“catepillar”和“狡猾”部分(“猫”和FOX)也将被替换。 如何更换唯一的一句话“猫”和“狐狸精”?

Answer 1:

这里有一对夫妇更多的问题。

# First, always use strict and warnings
# This will save you tons 
use warnings;
use strict;

# declare your vars with 'my' for lexical scope
my $inputFile = "somefile";
my $outputFile = "someotherfile";
my $Str1="cat";
my $Str2="fox";
my $NewStr="animal";

# use 3-arg lexically scoped open
open(my $F1, "<", $inputFile) or die "Error: $!";
open(my $F2, ">", $outputFile) or die "Error: $!";

while (my $line = <$F1>) {
     # surround with word boundary '\b'
     # NewStr is missing the "$"
     $line =~ s/\b(?:$Str1|$Str2)\b/$NewStr/g;
     # UPDATED
     # this should work to remove the parens
     $line =~ s/(\($NewStr\))/$NewStr/g;
     print $F2 "$line";

}

# close your file handles
close $F1;
close $F2;


Answer 2:

$line =~ s/\b(?:$Str1|$Str2)\b/$NewStr/g;

什么变化意味着:

\b为一个字边界零宽度断言

(?:启动组,但不使用它捕捉,只是分组



Answer 3:

用一个字边界断言建立自己的正则表达式。 你可以找到关于它的信息http://perldoc.perl.org/perlre.html 。



文章来源: replace many words with a new one
标签: perl replace