2015-08-26 459 views
1

我試圖從R中的字符串矢量中刪除一些不需要的文本,但未能實現我所需的輸出。用空格替換字符串

我想消除任何出現的單詞,這可能會出現在任何幾個變化。採取作爲例如:

a<-c("xyz (ALTERNA)","jqk(ALTERNA)","abc(ALTERNO)","def (ALTERNO)","mno (ALTERNO)","pqr (ALTERNA) ") 

欲消除與括號和任何前述空間中的字altern[ao]的任何發生,所以我嘗試:

gsub(pattern = "[:blank:]*\\(altern[ao]\\)",replacement = "",a,ignore.case = T) 

但它產生:

[1] "xyz "   "jq"    "abc"   "def (ALTERNO)" "mno (ALTERNO)" "pqr " 

我的理想輸出是:

[1] "xyz"  "jqK"  "abc"  "def"  "mno"  "pqr" 

我在做什麼錯,我該如何糾正? 謝謝,

回答

2

我們可以嘗試sub。我們匹配零個或多個空格(\\s*),後跟一個括號(\\(),後跟一個或多個字符(.*),直到字符串結尾($)並替換爲''

sub('\\s*\\(.*$', '', a) 
#[1] "xyz" "jqk" "abc" "def" "mno" "pqr" 
+0

感謝@akrun。我太專注於'alterno | a',錯過了弦的整個結構......你讓我回到了簡單。我注意到'gsub'也適用,有沒有什麼理由我應該使用其中一種? – PavoDive

+0

@PavoDive由於'sub'運行良好,因此不需要'gsub'。 – akrun

2

首先,您需要將POSIX類包裝在括號內的表達式中。要完全匹配所有這些子字符串,您需要修改正則表達式來計算所有空格。

[[:blank:]]*\\([[:blank:]]*altern[ao][[:blank:]]*\\)[[:blank:]]* 

IMO,因爲[:blank:]比賽空間和標籤沒有語言環境的變化我會寫這個如下,如果你想實際匹配的整個子和前/下空格。

[ \\t]*\\([ \\t]*altern[ao][ \\t]*\\)[ \\t]* 

但是,對於您的給出輸入,我只想做:

gsub('[^a-z]+', '', a) 
# [1] "xyz" "jqk" "abc" "def" "mno" "pqr"