我有一系列数据,例如a, b, c, d, e, f, g,
我需要将它们转换为'a', 'b', 'c', 'd', 'e', 'f', 'g'
所以我先在视觉模型中选择它们,然后我做了s/[a-z],/'&'/g
。
但结果却将它们转换为'a,' 'b,' 'c,' 'd,' 'e,' 'f,' 'g,'
我怎么能保留上一封信并将逗号移到第二个单引号的后面?
PS:我需要使用这些逗号来定位模式,因为还有其他字母没有逗号。
答案 0 :(得分:1)
您可以尝试以下vim搜索和替换功能。
:%s/\([a-z]\+\),/'\1',/g
\([a-z]\+\)
捕获一个或多个小写字母。稍后将通过反向引用来引用这些字符。 \1
指的是组索引1中存在的字符。
您的正则表达式s/[a-z],/'&'/g
出了什么问题?
[a-z],
匹配任何小写字母和以下逗号。替换部分中的&
将打印整场比赛。因此,在我们的示例中,匹配的字符将替换为'
+匹配+ '
。请注意,您的匹配包含逗号,因此您获得了'a,'
而不是'a',
答案 1 :(得分:1)
[a-z],
有效,但您在比赛中包含逗号。您可以使用\ze
将其排除。
此替换适用于您的样本:
:s/\l\ze,/'&'/g
\l
\ze
'&'