你如何使用正则表达式乘以10?

时间:2011-03-31 16:48:22

标签: regex perl

我遇到的问题可以等于乘以10的问题。第一种方法是:

   perl -pi -e 's/(\d+)/\1 0/g' myfile.txt

但是这会引入额外的空间,我不能把 \ 10 ,因为这样的组不存在。    我的解决方案是这种解决方法

   perl -pi -e 's/(\d+)/\1\l0/g' myfile.txt

小写 0,但我确信有一种我不知道的正确方法。

问候。

4 个答案:

答案 0 :(得分:8)

您应该在替换中使用$1表单而不是\1。这实际上是其中一个原因:使用变量形式,您可以说${1}0

答案 1 :(得分:5)

请勿在替换的RHS上使用\1表示法。使用$1

一般来说,backrefs和八进制表示法之间存在歧义问题。或者是。现在已经解决了。

在最新版本的Perl中,当您需要明确表示反向引用时,可以使用\g{1},当您需要明确表示八进制数时,可以使用\o{1}

答案 2 :(得分:4)

您可以使用/e修饰符:

perl -pi -e 's/(\d+)/$1 * 10/ge' myfile.txt

另见Warning on \1 Instead of $1

答案 3 :(得分:0)

我想扩展eugene的答案,只是为了更精确地包含数字。特别是如果你要做的事情除了乘以十之外,就像除以一半。

perl -pi -e 's/(?<!\d|\.)(\d+(?:\.\d+)?)(?!\d|\.)/$1 * 10/ge' file.txt

此处还有忽略十六进制格式或百分比颜色的版本。如果你正在修改css,那就很方便。

perl -pi -e 's/(?<!#|\d|\.)(\d+(?:\.\d+)?)(?!%|\d|\.)/$1 * 10/ge' file.txt