我已经学习了vim并且开始看到它有多强大(特别是与reg表达式相结合)。 现在我正在尝试用浮动值替换python文件中的所有整数。 例如。你会想到[0,0,0]这些需要[0.0,0.0,0.0]
的东西我现在最好的是: :%S / \(\ d + \)\ @< = S *,/ 0,/克 虽然我正在产生0.032.0
的结果两件事:
答案 0 :(得分:4)
假设你得到的结果“像0.032.0”是因为你从0.032开始
注意,这是当您尝试强制使用正则表达式而没有其他任何内容来解析非常规语言时会发生的情况。有许多边缘情况,这个正则表达式失败。我将在尝试时对其进行说明。
:%s/\(\[.*\)\@<=\([0-9]\+\)\(,[^,]*\.[^,]*\)\@<!\.\@!\(.*\]\)\@=/\2.0/cg
这是如何运作的?
首先,我想确保我在一个数组中。 \(\[.*\)\@<=
这是一个搜索文字[
这将在多行指定的列表上失败,并且在这种情况下也会失败(它将匹配3和4):
for (i,j,k) in zip([0, 0, 0], range(3), listOfLists[4]):
这为复杂性做出了折衷。请仔细检查所有比赛,以确保您没有做出您不想做的事情。
接下来,我想实际匹配文字,\([0-9]\+\)
简单。
接下来,我想确保数字之前或之后没有任何点,但忽略逗号之前和之后的内容。 \(,[^,]*\.[^,]*\)\@<!
接下来,我想确保比赛后没有文字句号。 \.\@!
最后,我想确保匹配后某处有一个文字]
(以确保我在一个数组内。\(.*\]\)\@=
然后最后但并非最不重要的是我用第二个捕获的组替换找到的文本并添加一个句点。
至于你的#2,不,但你可以将这些区域划入命名的粘贴缓冲区并随意使用它们。使用命令编辑模式q: