regex - "Multiple pass"用于修复空格缩进的正则表达式

标签 regex

搜索并发现了一些看似相似的问题,但并不完全相同。

我经常发现自己需要用制表符替换前导的 4 个空格缩进。我总是用 RegEx ^(\t*) {4} 代替 $1\t。然后我只是做多次传递来捕捉嵌套缩进。它有效,很容易。但我想知道,是否可以编写一个 RegEx 一次性完成此操作(以处理嵌套缩进)?

编辑

抱歉缺少输入/输出示例,我很着急。下面是一个示例,让 s 表示 spacet 表示 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/

相关文章:

python - 尝试从字符串列中提取点之间的字符串值

php - 替换单词数组

java - 带可选右括号的年份正则表达式

javascript - 十位数字的正则表达式

regex - eclipse - 正则表达式 : replace multiple group

mysql - 在mysql中使用REGEXP进行搜索,不包含重复字符

regex - Bash 正则表达式匹配具有精确整数范围的子字符串

javascript - RegExp.exec() 在 Firefox 中重复调用时返回 null?

java - 正则表达式:匹配组(如果存在)否则忽略并继续其他匹配

java - 正则表达式非常慢