如何使用正则表达式替换具有相同数量空格的不同数量的零?

时间:2012-03-08 22:00:56

标签: regex replace notepad++ fixed-length-record

我正在使用固定长度的字段数据,我需要将一系列数字的小数位缩短到只有两位小数。它只是小数点后的零,所以很容易编写一个会触发它的正则表达式。问题是,我需要用空格替换额外的零。我知道我可以保存一个子表达式并在替换中重新调用它,但有没有办法计算删除的零的数量并回想起来?我只是在Notepad ++的替换窗口中使用正则表达式。

3 个答案:

答案 0 :(得分:1)

我发现了一些适用于此的东西。

搜索字符串:([.]00[ ]*)0

替换字符串:\1(1后面有空格)

这样做是找到.00,后跟任意数量的空格,后跟零。然后将其替换为.00和空格,后跟空格。每次运行时,它都会用空格替换一个额外的零。它有效,但任何人都可以想到只需要运行一次的东西吗?这种情况在这种情况下起作用,但我还有其他时候希望正则表达式可以计算。

答案 1 :(得分:1)

  

这种情况适用于这种情况,但是我希望其他时候我希望正则表达式可以计算。

我们俩都不希望这样或那样:)

我发现做你需要的唯一方法是使用Python的正则表达式库,它允许你指定一个函数来进行替换,而不是替换字符串。因此,您可以在文件的每一行进行此调用:

re.sub(search_string, replace_func, line)

这就是你如何使用它:

import re
search_string = r'(\.0{2})(0+)'
# this function is called for each match, and returns the replace string
def replace_func(match):
    num_zeroes = len(match.group(2))
    if num_zeroes:
        return match.group(1) + num_zeroes * ' '
    else:
       return ''

for line in ('1234.0', '1234.00', '1234.000', '1234.0000'):
    print re.sub(search_string, zero_replacer, line)

不幸的是,这对Notepad ++没有帮助,但是如果你感兴趣的话,我可以编写一个更完整的python脚本来读取你的文件并开展工作。

答案 2 :(得分:0)

你需要在循环中运行它才能正确使用后向引用:

var data = "7.00000000000 5.00000000 8.0 9.000000000000000000000";
var re = /(\.0{0,2})(0*)/;
alert(data.replace(re, RegExp.$1 +RegExp.$2.replace(/0/, 'x')));

编辑:第一个答案已折叠,这不是OP想要的。