匹配前如何查找和替换?

How to find and replace before the match?

我有逗号分隔的数据,例如 12345,6789,567890。我想要的是在第一个逗号之前找到 3 位数字,并在它们开始的地方放一个逗号。鉴于上述条目,我想在第一个逗号之前找到 3 位数字,即 345 并将条目“12345”转换为“12,345”。

在第一个逗号出现之前查找 3 位数字的正则表达式是什么,以及如何在这 3 位数字之前放置逗号。我正在使用 vim.

为了查找和替换您需要捕获组。允许您执行此操作的正则表达式是:

(\d{3},)([\d,]*)

但是,为了能够使用它在 vim 中查找和替换,您需要进行简单的修改,因为它需要跳过量词的第一个大括号。然后,您可以在整场比赛之前插入昏迷。在vim中可以直接使用如下语句:

.s/\d\{3},[\d,]*/,[=11=]/

作为简要说明,\d\{3}, 允许您精确匹配第一个逗号和逗号之前的前三位数字。然后正则表达式的其余部分允许您捕获尾随部分。最后,在 vim 中,,[=16=] 允许您在完整匹配之前设置一个逗号。

您已使用 perl 标记,因此您可以:

echo '12345,6789,567890' | perl -pe 's/^[^,]*\K(?=\d{3},)/,/'
12,345,6789,567890

解释:

^               # beginning of line
  [^,]*         # 0 or more any character but comma
  \K            # forget all we have seen until this position
  (?=           # positive lookahead, make sure we have after:
    \d{3}       # 3 digits
    ,           # a comma
  )             # end lookahead