【问题标题】:How can I use a regex to replace a varying number of zeroes with the same number of spaces?如何使用正则表达式用相同数量的空格替换不同数量的零?
【发布时间】:2012-03-26 09:51:08
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我在这里找到了一些有用的东西。

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

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

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

    【讨论】:

    • 简洁的解决方案,我不相信有一种方法可以在一行中完成您需要的操作。
    • 幸运的是,任何字段中最多的额外零是 4 或 5。如果有很多我会遇到麻烦 :) 编辑:实际上,我想我可以让它替换多个零一次,通过 2 的幂次倒计时。
    【解决方案2】:

    您需要循环运行它才能正确使用反向引用:

    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 想要的。

    【讨论】:

    • 固定长度字段意味着替换后的字符数必须与之前相同。用空字符串替换某些东西是行不通的,这就是为什么我正在寻找一种方法让正则表达式知道它找到了多少个字符。
    • 那是什么语言?我只是在 Notepad++ 中使用内置的正则表达式,而不是将其写入程序。但是,如果我对其进行编码,您的解决方案似乎确实可以工作。
    • javascript。 notepad++ 似乎不允许使用量词 {0,2},所以我认为它甚至不能计数。
    【解决方案3】:

    这在这种情况下有效,但我有其他时候希望正则表达式可以计数。

    我们不是都曾希望这样吗:)

    我发现做你需要的唯一方法是使用 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 脚本来读取你的文件并完成工作。

    【讨论】:

    • 我的解决方案目前有效,但如果我必须做更大的事情,我可能会回来并将您的解决方案合并到脚本中。谢谢你的提议:)
    • 有一个 python 插件可以在你的 Notepad++ 代码上运行 python 脚本。因此,您可以用它制作一个脚本,运行它,然后您就很成功了。但也许这就是你已经提到的?
    猜你喜欢
    • 2019-03-04
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    相关资源
    最近更新 更多