正则表达式捕获一行中的第二个空格?

时间:2014-11-06 19:56:48

标签: regex vim

我有以下文字:

  

接近,紧随其后,按顺序或沿指定路线行进/   方向

如何匹配“e”之后的空格,然后用标签替换它?

虽然这对你们所有人来说都很容易,但我花了4个小时试图做到这一点却没有成功。

一般规则是“仅匹配第二个单词后面的空格”。我有超过2000条独特的线条,这就是我需要正则表达式的原因。

谢谢!

3 个答案:

答案 0 :(得分:1)

搜索:^([^ ]+[ ]+[^ ]+)[ ]
替换为:\1\t

从行的开头,查找非空格的模式,后跟空格,后跟另一组非空格。最后,匹配一个空格字符 替换是导致最终空格字符的所有内容,然后是选项卡。

演示:http://regex101.com/r/oS8vV7/1


您可能无法仅匹配 您要替换的空间。这需要一个可变长度的后视isn't supported

答案 1 :(得分:1)

vi编辑器中,您可以使用此搜索/替换:

:s/^\([[:blank:]]*\w\+[[:blank:]]\+\w\+\)[[:blank:]]\+/\1\t/

或更短(感谢@PeterRincker):

:%s/\v(\w+\zs\s+){2}/\t

答案 2 :(得分:0)

s/\s//2

这可用于搜索空格(\s)和删除空格,2表示第二个空格。