搜索并发现了一些看似相似的问题,但并不完全相同。
我经常发现自己需要用制表符替换前导的 4 个空格缩进。我总是用 RegEx ^(\t*) {4}
代替 $1\t
。然后我只是做多次传递来捕捉嵌套缩进。它有效,很容易。但我想知道,是否可以编写一个 RegEx 一次性完成此操作(以处理嵌套缩进)?
编辑
抱歉缺少输入/输出示例,我很着急。下面是一个示例,让 s
表示 space
,t
表示 tab
:
SMA
ssssRTP
ssssssssATR
ssssssssOLN
ssssOWH
ssssERE
TOGO
输出:
SMA
tRTP
ttATR
ttOLN
tOWH
tERE
TOGO
本质上,RegEx 需要允许 4 个空格的任意深度嵌套 block 。它不需要允许在初始输入中的空格后使用制表符。
PCRE
最佳答案
(^\t*|\G) {4}
替换为 $1\t
或 (^|\G)( {4}|\t)
替换为 \t
。您应该使用多行模式。
这是如何工作的:
^\t*
— 此匹配字符串开头后跟任意数量的制表符。
\G
— 本场比赛结束于上一场比赛。
{4}
— 这匹配四个空格。
所以这个正则表达式匹配字符串开头的四个空格或四个空格后面的四个空格已经被这个正则表达式匹配。
关于regex - "Multiple pass"用于修复空格缩进的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27867365/