当前位置: 首页 > 知识库问答 >
问题:

修改和替换字符串中带引号的子字符串

濮阳安澜
2023-03-14

我正在做一个语言翻译项目,但在中间的某个地方卡住了。

我有这样的情况,有一根绳子

print "$Hi $There","$Welcome $Aboard"

我想得到

print "Hi There", "Welcome Aboard" 

即提取带引号的子字符串,去掉“$”并用新的子字符串替换原始子字符串。

我可以提取和更改引用的子字符串,但当我尝试用原始子字符串替换它们时,它不起作用。要显示示例代码:

#!/usr/bin/perl
use strict;
use warnings;

my $str = "print \"\$Hi \$There\",\"\$Welcome \$Aboard\"";
print "Before:\n$str\n";
my @quoted = $str =~ m/(\".*?\")/g; #Extract all the quoted strings
foreach my $subStr (@quoted)
{
  my $newSubStr = $subStr;
  $newSubStr =~ s/\$//g;    #Remove all the '$'

  $str =~ s/$subStr/$newSubStr/g;   #Replace the string**::Doesn't work**
}
print "After:\n$str\n";

我不知道为什么替换失败。会感谢你的帮助。

共有3个答案

夹谷鸿福
2023-03-14

尝试此代码:因为您想提取双引号中存在的子字符串并在该双引号中去掉$。您可以尝试下面的代码

代码:

#!/usr/bin/perl    
use strict;
use warnings;

my $str = "print \"\$Hi \$There\",\"\$Welcome \$Aboard\"";
print "Before:\n$str\n";

while($str =~ m/(\"[^\"]*\")/isg) #Extract all the quoted strings
 {
      $str =~ s/\$//isg; # Strip $ from $str
    }
print "After:\n$str\n"; 

Perl单行代码:

perl -0777 -lne "if($_ =~ m/\".*?\"/isg) {$_ =~ s/\$//isg; print $_;} else { print $_;}" Inputfile
郑松
2023-03-14
\$(?=[^"]*"(?:[^"]*"[^"]*")*[^"]*$)

试试这个。仅当 $ 位于 之间时,这将替换 $

请参阅演示。

http://regex101.com/r/lS5tT3/61

东郭承业
2023-03-14

您需要在正则表达式中添加 \Q\E。您的代码的工作方式如下:

#!/usr/bin/perl
use strict;
use warnings;

my $str = "print \"\$Hi \$There\",\"\$Welcome \$Aboard\"";
print "Before:\n$str\n";
my @quoted = $str =~ m/(\".*?\")/g; #Extract all the quoted strings
foreach my $subStr (@quoted)
{
  my $newSubStr = $subStr;
  $newSubStr =~ s/\$//g;    #Remove all the '$'

  $str =~ s/\Q$subStr\E/$newSubStr/g;   # Notice the \Q and \E
}
print "After:\n$str\n";

发生的事情是您的$subStr看起来像这样,例如:"$Hi$有"

我不确定它是否将< code>$Hi和< code>$There解释为变量,但它并不像您想要的那样匹配文字字符串。您可以在quotemeta文档中阅读有关< code>\Q和< code>\E的信息。

 类似资料:
  • 本文向大家介绍替换Java字符串中的子字符串,包括了替换Java字符串中的子字符串的使用技巧和注意事项,需要的朋友参考一下 假设以下是我们的字符串。 我们想将子字符串“ Dead”替换为“ Alive”。为此,让我们使用以下逻辑。在这里,我们使用了while循环,并在其中找到了要替换的子字符串的索引。这样,我们一个接一个地替换了整个子字符串。 以下是替换子字符串的完整示例。 示例 输出结果

  • 问题内容: 我想替换列中的子字符串 到。 需求输出 我尝试,但它返回。 问题答案: 使用与更换和:

  • 问题 你需要用另一个值替换字符串的一部分。 解决方案 使用 JavaScript 的 replace 方法。它与给定字符串匹配,并返回已编辑的字符串。 第一个版本需要 2 个参数:模式和字符串替换 "JavaScript is my favorite!".replace /Java/, "Coffee" # => 'CoffeeScript is my favorite!' "foo bar b

  • 我已经尝试遍历字符串并手动替换它们,但计数是关闭的。我也尝试过使用列表、数组、stringbuilder等,但我无法使其工作: 我觉得必须有一种简单的方法来用子字符串替换字符串中的单个字符,而不必进行所有这些迭代。我说错了吗?

  • 问题内容: 我正在从数据库中检索数据,其中该字段包含带有HTML数据的字符串。我想替换所有的双引号,使得它可以被用于的 jQuery的 。 使用Java,我正在尝试使用替换引号。 结果字符串未显示所需的更改。O’Reilly的一篇文章规定了使用Apache字符串工具。还有其他办法吗? 是否有正则表达式或我可以使用的东西? 问题答案: 这是如何做 请注意,字符串是不可变的,因此仅仅做是不够的。您必须

  • 给定一个包含项a和B的字符串M,我想用每个a来代替B,用每个B来代替a来代替M'。天真地,人们会尝试用B代替A,然后用A代替B,但在这种情况下,M'只包含A。我可以想到替换这些项,并记录它们的位置,这样这些项就不会再被替换了。当我们只有A和B可以替换时,这是有效的。但是如果我们需要替换两个以上的项,而且它们的长度不同,那么这就变得很棘手了。 所以我想这样做: 我们将M作为输入字符串,并将R=[(x