使用Regex将零附加到数字

时间:2014-03-01 07:49:01

标签: regex perl

我有一个包含多个数据条目的JSON,我需要将三个0附加到。我用来过滤掉我要编辑的数字的正则表达式是:(?< =“)[0-9] +(?=”)。这应该返回“1234”形式的所有数字。当我在命令行上尝试使用perl时,我没有取得多大成功。我试过的命令是:

perl -i -pe 's/((?<=")[0-9]+(?="))/($1)000/' input.json    

使用任何工具来实现结果都没问题;我相信sed不起作用,因为它不支持回顾和前瞻性正则表达式。

3 个答案:

答案 0 :(得分:4)

($1)用括号括起匹配的字符串。使用${1}作为替换字符串。 ({}需要区分组号和尾随000

perl -i -pe 's/((?<=")[0-9]+(?="))/${1}000/g' input.json
顺便说一下,你不需要使用积极的外观断言。只需使用捕获组:

perl -i -pe 's/"([0-9]+)"/"${1}000"/g' input.json

<强>更新

要替换行中的所有字符串,您需要指定g标志。

答案 1 :(得分:0)

使用\ K保留"123部分。

 perl -i -pe 's/"[0-9]+ \K (?=")/000/x'

然后您不需要携带任何捕获的文本。这需要Perl 5.10或更高版本。

答案 2 :(得分:0)

您需要/g修饰符来更改字符串中所有次出现的内容。

使用\K(“保持”)元字符也更容易,以避免必须替换字符串中的数字。它相当于一个积极的后视,但可以接受一个可变长度的模式。

你应该使用

perl -i -pe 's/"\d+\K(?=")/000/ag' input.json