我有一个包含数字和字母列的文件:
0.01182290 0.02526555 0.46794573 RING zinc finger protein putative 0105800 1076 1166 -90
我想将字母之间的空格替换为下划线。
0.01182290 0.02526555 0.46794573 RING_zinc_finger_protein_putative 0105800 1076 1166 -90
我是regex的新手,替代字符串是[a-zA-Z]\s[a-zA-Z]
,但我无法确定替换字符是什么。我试过的一切都改变了空格之间的字母。
:%s/[a-zA-Z]\s[a-zA-Z]/??/g/
答案 0 :(得分:7)
您可以使用:
:%s/\v(\a)\s(\a)/\1_\2/g
这里的想法是使用捕获组并将其捕获的值放在输出中。
答案 1 :(得分:5)
更简单的替代方法是使用vim的匹配开始和匹配原子结束(\zs
和\ze
):
:%s/\a\zs\s\ze\a/_/g
故障:
:%s/
- 开始整个文件的替换命令\a
- [A-Za-z]
\zs
- 匹配字符串开头\s
- 空格或标签\ze
- 匹配结束字符串\a
- 与上述相同/_/
- 将匹配字符串替换为_
g
- 对于行中的每次出现