匹配前如何查找和替换?
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
我有逗号分隔的数据,例如 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