2014-12-04 43 views
0

我想通過一個字符的第二次出現在一個字符串(在字符串之前字符x的第二個出場的回報子)Strsplit()由分隔符的第二occurence

對於字符串分割:

s <-"a_b_c",如果分隔符是"_",我需要的字符串:"a_b"

我的函數返回第一次出現的字符串:

return_topic<-function(s) 
{ 
    if (length(grep("_",s))>0) 
    { return (unlist(strsplit(s,"_"))[1])} 
    else return (" ") 

    } 


> return_topic("a_b_c") 
[1] "a" 
+0

不知道這將是最簡單的方法,但爲什麼沒有被分隔符分開,然後添加第一個通過相同的分隔符回到一起。 v = strsplit(word,split =「|」,fixed = TRUE) – JJFord3 2014-12-04 16:26:17

+0

a,b和c有什麼特徵?他們總是一樣的長度? – 2014-12-04 16:41:23

+0

a,b,c是任意長度的字符串 – agatha 2014-12-05 14:49:48

回答

4

您可以使用sub方式:

sub("(.*?_.*?)_.*", "\\1", s) 
# [1] "a_b" 
+0

,或者您可能想將它寫爲'pat < - 「(。*?_。*?)_(。*)」; sub(pat,「\\ 1」,s)'此後'sub(pat,「\\ 2」,s)'給出分割的後半部分。 – 2014-12-04 16:32:58

0

一個使用strsplit

s <- c('a_b_c', '_b', '_bc_', 'abc__') 
sapply(strsplit(s, '^[^_]*?[_][^_]*?(*SKIP)(*F)|_', perl=TRUE),`[`,1) 
#[1] "a_b" "_b" "_bc" "abc_"