如何替换正则表达式中未知数量的模式重复?
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.
我正在用制表符缩进替换我 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.