2014-11-06 888 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表示第二個空格。