替换文本时 Atom \K 替代

Atom \K alternative when replacing text

我的用例如下:我有一个 86,000 行长的文档。它出现了 5851 次管道符号。我需要每 5 次出现一次就将管道 | 更改为现在的 ]|.

我终于为我的用例找到了正确的正则表达式 (?:(\d*|\D)*(\|)){9}\K。我知道这一点,因为我在 Regex 101 的这个示例中构建了它。它的作用是仅选择 nth 管道并允许我仅与该管道进行交互。

如果您 increment/decrement 大括号中的数字,它会相应移动。伟大的。万岁。

但是,atom.io(我的编辑器)称 \K 为无效转义。请问原子的首选正则表达式是什么?或者,还有更好的方法吗?

这里的重点是 \K 是一个运算符,它只是省略了当前匹配内存缓冲区中到目前为止匹配的文本。您可以在 Keep The Text Matched So Far out of The Overall Regex Match 中阅读有关 \K 的更多信息。

当您需要替换 紧接在其他字符串或文本之前的内容时,您可以简单地使用 capturing group and a backreference.

您可以使用

查找内容^((?:[^|\r\n]*\|){4}[^|\r\n]*)\|
替换为]|

regex demo

详情

  • ^ - 行首
  • ((?:[^|\r\n]*\|){4}[^|\r\n]*) - 捕获组 1(从替换模式中引用 </code>): <ul> <li><code>(?:[^|\r\n]*\|){4} - 出现四次
    • [^|\r\n]* - |、CR 和 LF 以外的 0+ 个字符(CR 和 LF 是必要的,以免在下一行溢出)
    • \| - 管道字符(它在正则表达式中很特殊,因此被转义)
  • [^|\r\n]* - |、CR 和 LF
  • 以外的 0+ 个字符
  • \| - 将被匹配、消耗并替换为替换模式的管道。