仅在字母

时间:2017-02-23 14:21:32

标签: regex vim

我有一个包含数字和字母列的文件:

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/

2 个答案:

答案 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 - 对于行中的每次出现