比赛前如何寻找和更换?

时间:2019-05-22 14:52:50

标签: regex perl pcre vi regex-lookarounds

我有逗号分隔的数据,例如12345,6789,567890。我想要的是在第一个逗号之前找到3位数字,并在它们开始处添加一个逗号。给定以上条目,我想在第一个逗号之前找到3位数字,即345,然后将条目“ 12345”转换为“ 12,345”。

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

2 个答案:

答案 0 :(得分:4)

您已经用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

答案 1 :(得分:1)

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

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

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

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

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