我想在项目描述符和以下数据集中的百分比值之间添加逗号:
Item Percent
Beer 15%
Bottled Water 5%
Chocolate Bar 15%
Chocolate Dipped Cone 15%
Gummy Bears 15%
Hamburger 5%
Hot Dog 5%
Ice Cream Sandwich 15%
Licorice Rope 15%
Nachos 5%
Pizza 5%
Popcorn 5%
Popsicle 15%
Soda 15%
我尝试了类似s/ /, /
的内容,但后来我在Hot Dog
之间得到一个逗号,这不是我想要的。逗号应该只在文本描述符之后。
我还以为我可以尝试识别第一个数字并在它前面添加逗号,但我似乎无法弄清楚如何识别数字。当我使用\d
时,数字被替换而不会被记住。
答案 0 :(得分:3)
采取你认为正确的那个,(你没有提供输出示例)
%s/\s\d/,&/
将给出
Hot Dog ,5%
%s/\s*\d/,&/
将给出
Hot Dog, 5%
%s/\s*\ze\d/, /
将给出
Hot Dog, 5%
最后一个将空格替换为一个
答案 1 :(得分:3)
使用\(...\)
捕获数字,然后使用\1
在输出中复制数字。
:%s/ \([0-9]\)/ ,\1/
但是由于你有多个空格,你可能需要在所有空格之前使用逗号。所以将它们添加到捕获组:
:%s/\( *[0-9]\)/,\1/
更好的是,您可以通过匹配百分号来防止项目描述符中的数字(例如" 7层卷饼")。捕获所有数字和百分号并复制它们:
:%s/\( *[0-9][0-9]*%\)/,\1/
传统vi
中使用的基本正则表达式不具有\d
,因此我习惯使用[0-9]
代替:%s/\( *\d\+%\)/,\1/
。使用不太便携的vim正则表达式,您可以将上述内容缩短为:
{{1}}
答案 2 :(得分:2)
:%s/\ze\s\+\d\+%/,/
我倾向于选择\zs
和\ze
而不是群组 - > :h /\ze
答案 3 :(得分:2)
这是一个非常简单的:normal
解决方案:
:%norm! f%F ciw,
故障:
f% move the cursor on the %
F<space> move the cursor on the first space to the left
ciw,<space> replace the whitespace under the cursor with a comma followed by a space
请参阅:help :normal
。