【问题标题】:replace many words with a new one用一个新词替换许多词
【发布时间】:2013-05-23 01:28:18
【问题描述】:

我有以下字符串:

猫狗狐狸毛毛虫熊狐狸

我需要把这句话中的“cat”和“fox”替换成“animal”

我执行以下操作:

$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";

}

但是单词的“毛毛虫”和“狡猾”部分(“猫”和“狐狸”)也被替换的问题。 如何只替换单词“cat”和“fox”?

【问题讨论】:

    标签: perl replace


    【解决方案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;
    

    【讨论】:

    • 谢谢。有用 :)。但是如果我在括号“()”中有一些词。假设我有“这样的单词 fox (fox)。我有结果 - “(animal)”带括号。替换单词时如何删除括号?-
    • 我建议你接受这个答案(或者 Vorsprung 的,如果你更喜欢这个答案)并就这个新问题提出一个新问题。
    • @JackPerl 只有一个 :)
    • @JackPerl 最简单的方法是在删除括号后立即添加另一个正则表达式。
    【解决方案2】:
    $line =~ s/\b(?:$Str1|$Str2)\b/$NewStr/g;
    

    这些变化意味着什么:

    \b 字边界的零宽度断言

    (?:开组但不用于抓包,只是分组

    【讨论】:

    • 谢谢。有用 :)。但是如果我在括号“()”中有一些词。假设我有“这样的狐狸字(狐狸)。我有结果 - 带括号的“(动物)”。替换单词时如何删除括号?
    【解决方案3】:

    使用单词边界断言来构建您的正则表达式。你可以在http://perldoc.perl.org/perlre.html找到它的信息。

    【讨论】:

      猜你喜欢
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      相关资源
      最近更新 更多