2014-11-06 887 views
-1

我有以下文字:正则表达式捕获行中的第二个空格?

亲近,是旁边,依照顺序,或沿指定路线/ 方向

我怎么会在“E后面的空格匹配“关闭,然后用标签替换它?

虽然这可能对大家都很容易,但我花了4个小时试图做到这一点,但没有成功。

一般规则是“只匹配第二个单词之后的空格”。我有超过2000个独特的线,这就是为什么我需要一个正则表达式。

谢谢!

+0

用这个特定的文字来做这件事很容易..是否有更通用的规则需要遵循?什么语言/正则表达式引擎? – 2014-11-06 19:58:04

+0

是的,我希望提供帮助的一般规则是“总是只匹配一行中的第二个空格,没有别的,没有什么不足。”我必须做这2000次,然后用选项卡替换匹配的空间 – user798719 2014-11-06 20:10:24

+0

为什么你想使用正则表达式?为什么不使用字符串函数? – anubhava 2014-11-06 20:23:53

回答

1

vi编辑器,你可以使用这个搜索/替换:

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

或更短(感谢@PeterRincker):

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

有点短:':%s/\ v(\ w + \ zs \ s +){2}/\ t'甚至更短:':%norm 2f r^I'其中'^ I'是通过键入的制表符''。 – 2014-11-06 21:06:34

+0

谢谢@PeterRincker:'%s/\ v(\ w + \ zs \ s +){2}/\ t'是一个很好的 – anubhava 2014-11-06 21:13:13

1

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

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

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


你可能不能够匹配只有你要替换的空间。这将需要可变长度的后视镜isn't supported

0
s/\s//2 

这可以用于搜索空间(\s)并删除空间,其中2表示第二个空格。