Regex Perl正则表达式:查找第二个下划线并替换为字符串中的冒号

Regex Perl正则表达式:查找第二个下划线并替换为字符串中的冒号,regex,string,perl,search,replace,Regex,String,Perl,Search,Replace,我在这个让我发疯的正则表达式上寻求你的智慧 我想用冒号替换第二个下划线。就这样 到目前为止: my $str = "bythepower_of_grayskull"; $str =~ s/.*?_.*?(_)/:/g; print "$str\n"; 电流输出::灰色骷髅 所需输出:通过:grayscoul的增强,您需要将捕获组放置在要保留的零件周围,而不是要替换的零件周围。然后在替换中使用$1复制捕获的文本 $str =~ s/(.*?_.*?)_/$1:/; 如果

我在这个让我发疯的正则表达式上寻求你的智慧

我想用冒号替换第二个下划线。就这样

到目前为止:

    my $str = "bythepower_of_grayskull";
    $str =~ s/.*?_.*?(_)/:/g;
    print "$str\n";
电流输出::灰色骷髅


所需输出:通过:grayscoul的增强,您需要将捕获组放置在要保留的零件周围,而不是要替换的零件周围。然后在替换中使用$1复制捕获的文本

$str =~ s/(.*?_.*?)_/$1:/;

如果只有2个下划线,则不需要g修饰符,因为只需要进行一次替换。

需要将捕获组放在要保留的零件周围,而不是要替换的零件周围。然后在替换中使用$1复制捕获的文本

$str =~ s/(.*?_.*?)_/$1:/;

如果只有2个下划线,则不需要g修饰符,因为只进行了一次替换。

您可以捕获第一个下划线+某个字符串的出现,然后捕获第二个下划线并相应地替换

解决方案1 正则表达式:_

说明:

_*匹配第一个下划线和一些字符串

_匹配第二个下划线

要执行的替换:替换为\1:

解决方案2 正则表达式:[^]*$

说明:由于字符串只有两个下划线,此正则表达式将捕获字符串末尾的第一个下划线

_匹配字符串末尾的第一个下划线。从一开始就是第二个

[^\u]*$匹配字符串的其余部分,直到结束

要执行的替换:替换为:\1

解决方案3 您还可以使用正向前瞻。这是对解决方案2的一点修改。这里唯一需要做的事情是向前看字符串的其余部分,而不是捕获它

正则表达式:[^]*$

说明:

_匹配下划线,直到字符串结束时才显示下划线。因此,数学上第二个下划线将匹配。 要执行的替换:替换为:


您可以捕获第一个下划线+某个字符串的出现,然后捕获第二个下划线并相应地替换

解决方案1 正则表达式:_

说明:

_*匹配第一个下划线和一些字符串

_匹配第二个下划线

要执行的替换:替换为\1:

解决方案2 正则表达式:[^]*$

说明:由于字符串只有两个下划线,此正则表达式将捕获字符串末尾的第一个下划线

_匹配字符串末尾的第一个下划线。从一开始就是第二个

[^\u]*$匹配字符串的其余部分,直到结束

要执行的替换:替换为:\1

解决方案3 您还可以使用正向前瞻。这是对解决方案2的一点修改。这里唯一需要做的事情是向前看字符串的其余部分,而不是捕获它

正则表达式:[^]*$

说明:

_匹配下划线,直到字符串结束时才显示下划线。因此,数学上第二个下划线将匹配。 要执行的替换:替换为:


不要仅在一次替换中使用g修改器:

$str =~ s/_[^_]*\K_/:/;

不要仅在一次替换中使用g修改器:

$str =~ s/_[^_]*\K_/:/;
你所需要的只是

$str =~ s/.*\K_/:/;
你所需要的只是

$str =~ s/.*\K_/:/;


字符串中只有两个还是可以超过两个?很少有其他例子有助于澄清。谢谢提问。总共只有两个下划线。对于冒号,我只需要替换第二个下划线,字符串中只有两个uu,或者可以超过两个?很少有其他例子有助于澄清。谢谢提问。总共只有两个下划线。我只需要为冒号替换第二个下划线。什么是第二个捕获组?@Barmar:添加了解释。我看不到。为什么在下划线周围需要一个捕获组?你没有在任何地方使用\2。@Barmar:哦,是的,你是对的。那是个愚蠢的错误。起初我想我可能会替换它。thnx非常感谢您提供的信息。这让我尝试了一些不同的东西。就是这样。第二个俘虏小组是干什么的?@Barmar:补充了解释。我看不出来。为什么在下划线周围需要一个捕获组?你没有在任何地方使用\2。@Barmar:哦,是的,你是对的。那是个愚蠢的错误。起初我想我可能会替换它。thnx非常感谢您提供的信息。这让我尝试了一些不同的东西。就是这样。太棒了。上面的信息加上这个小片段让一切都清楚了。太多了!令人惊叹的上面的信息加上这个小片段让一切都清楚了。太多了!谢谢,这个答案对我很有帮助:谢谢,这个答案对我很有帮助: