如何替换正则表达式中未知数量的模式重复?

How to replace an unkown amount of repetitions of a pattern in regexp?

我正在用制表符缩进替换我 python 文件中的所有 space 缩进,因为由于某些原因我的缩进工具没有进行替换(它适用于 js,html, css 个文件)。

我正在尝试使用正则表达式将模式全局替换为 vscode,但我找不到要使用的正确表达式。我想用制表符替换所有四个-spaces:/ /g,但是在代码的某些地方,我想保留的表达式中间有一些特殊的缩进。他们打算使代码更具可读性,看起来像这样:

    a       = 1
    aaaaaaa = 2
    aaaa    = 3

替换这四个 space 会破坏对齐,所以我想保留这些 space 缩进(稍后我可能会替换它们,但现在我不需要费心这样做).

我发现的新模式是换行符后跟未知数量的四 spaces:/\n( )*/g。这将搜索所有经典缩进,不包括表达式中间非常具体的缩进。但是我找不到用正确数量的制表符替换这些模式的方法:我不是替换一个四 space,而是替换未知数量的四 spaces.

如何用正则表达式替换未知数量的模式重复?

您可以使用

(?<=^(?: {4})*) {4}

替换为\t。见 regex demo.

结果截图:

详情:

  • (?<=^(?: {4})*) - 正后视匹配紧接在行首之后的位置,然后是任意数量的四个 space 字符串
  • {4} - 四个 spaces.