如何用动态数量的空格替换子字符串

How to substitute substring with dynamic number of spaces

我想使用 Notepad++ 将一列数字的小数位替换为等量的空格。

例如,这个输入(竖条是故意的)

|    1.23|
|  45.678|
|901.2345|

会变成

|    1   |
|  45    |
|901     |

基本上,点和小数位已被动态数量的空格替换:第一行 2+1 个空格,第二行 3+1 个,第三行 4+1 个。

我看过一些不同的帖子,例如 this,并尝试过类似的东西:\s+ 替换 \.\d+,没有成功。

  • Ctrl+H
  • 查找内容:\.(\d)?(\d)?(\d)?(\d)?
  • 替换为: (?1 )(?2 )(?3 )(?4 )
  • 检查 环绕
  • 检查 正则表达式
  • 全部替换

解释:

\.          # a dot
(\d)?       # optional group 1, 1 digit
(\d)?       # optional group 2, 1 digit
(\d)?       # optional group 3, 1 digit
(\d)?       # optional group 4, 1 digit
and so on

替换:

            # a space
(?1 )       # if group 1 exists, add a space
(?2 )       # if group 2 exists, add a space
(?3 )       # if group 3 exists, add a space
(?4 )       # if group 4 exists, add a space
and so on

屏幕截图(之前):

截图(之后):

您可以在 PythonScript 插件中 运行 python 脚本。

以下内容适用于点后的任意数字。

如果还没有安装,按照这个guide

  • 创建脚本(插件 >> PythonScript >> 新脚本)
  • 复制此代码并保存文件(例如format.py):
import re
def format(match):
    return " " * len(match.group(1))
editor.rereplace('(\.\d+)', format)
  • 打开你要修改的文件
  • 运行 脚本 Plugins >> PythonScript >> Scripts >> format
  • 完成

屏幕截图(之前):

截图(后):

如果我理解得很好,请在记事本++中试试这个,

查找:^([ |\d]*)\.|\G\d{1,1}
替换为: 在 $1 之后有一个 space

现在可以使用 Notepad++
Updated answer

有图有证