我想在找到字符串匹配之前替换space / tab /或任何字符。
鉴于此输入:
“1)苹果.2)蓝色笔.3)黑色衬衫.4)红色帽子。”
我想要这个输出:
1)apple._2)blue pen._3)black shirt._4)red hat。
有一个固定的模式,例如数字后跟)
,之前我想要替换。
代码:
$str = "1)apple. 2)blue pen. 3)black shirt. 4)red hat.";
print "before ==> $str \n";
$str =~ s/.(\d+)/_/g;
print "after ==> $str \n"; # o/p: 1)apple._)blue pen._)black shirt._)red hat.
由于
答案 0 :(得分:2)
您需要将捕获的匹配$1
添加到替换运算符的替换端。
$str =~ s/.(\d+\))/_$1/g;
你也可以在这里使用先行断言。
$str =~ s/.(?=\d+\))/_/g;
如果您的模式有多个数字,例如9)orange. 10)black shirt.
,则失败。相反,你可以使用否定的匹配,这将成功。
$str =~ s/[^\d](?=\d+\))/_/g;
答案 1 :(得分:1)
将您的模式s/.(\d+)/_/g
更改为s/.(\d+\))/_\1/g
。模式中的\1
表示您捕获的值
更新
在启用警告后,它表示最好将\1
写入$1