【发布时间】:2020-08-26 22:01:44
【问题描述】:
我的用例如下:我有一个 86,000 行长的文档。它出现了 5851 次管道符号。我需要将每 5 次出现的管道从 | 更改为现在的 ]|。
我终于为我的用例找到了正确的正则表达式(?:(\d*|\D)*(\|)){9}\K。我知道这一点,因为我在这个例子中在Regex 101 构建了它。它的作用是只选择 nth 管道并允许我仅与该管道进行交互。
如果您增加/减少大括号中的数字,它会相应地移动。伟大的。万岁。
但是,atom.io(我的编辑)调用 \K 是无效的转义。请问原子的首选正则表达式是什么?甚至,有没有更好的方法来做到这一点?
【问题讨论】:
-
您可以在替换中使用整个匹配
^(?:[^|]*\|){3}[^|]*\|regex101.com/r/UiEmPD/1 或者如果您想用其他东西替换它,请捕获组中管道之前的部分并匹配最后一个管道regex101.com/r/c55dlx/1 -
使用捕获组和反向引用,regex101.com/r/zvaJzN/1
-
天啊,我们是如此接近!它几乎可以工作了。我的文档有 86,000 行长,每 6 个管道需要从 | 更改。到]|。这些没有考虑到这一点(因为我忘了说)。
-
我现在已经编辑了原始问题。我很抱歉。我以为我可以从您的回答中倒退。但这正是它的本质:向后工作!
-
因此,要替换第 5 个管道,请使用
^((?:[^|\r\n]*\|){4}[^|\r\n]*)\|并替换为$1]|。或\1]|。它有效吗?见regex101.com/r/Azx3vT/1
标签: regex atom-editor