2014-05-10 64 views
0

我有將其從詩子串至第n + X線的字符向量

1 First line 
2 Second line 
3 Third line 

4 Fourth line 
5 Fifth line 

我想從第三子串的矢量創建的字符向量

string <- "First line\nSecond line\nthird line\n\nFourth line\nFifth line" 

的第五節或第三到第五行的詩句(空行不計算在內,不應計算在內)。除第一行之外的每行可能以\n\n\n開頭。我不知道這些行的內容(當然),我不知道我在第3行和第5行之間有多少空行(\n\n)。然後我想

substring <- "third line\n\nFourth line\nFifth line" 

然後可以呈現爲

3 Third line 

4 Fourth line 
5 Fifth line 
+0

你能舉一些例子嗎?因爲它看起來像你在計數線條有趣。所以'\ n'並不意味着新的路線?你需要第三,第四和第五個非空行? – MrFlick

回答

0

使用我們將字符串分成組。

groups <- strsplit(string, "\n\n+")[[1]] 
paste(sub(".*\n", "", groups[1]), groups[2], sep = "\n\n") 

給:然後在第一組中留下的最後一行和粘貼與第二組中刪除一切,直至最後\n一起

[1] "third line\n\nFourth line\nFifth line" 

注意,上面總是把2第一組的最後一行和第二組的第一行之間即使原來有更多的第一行,也可以使用\n。如果其重要的是保留\n的數字,然後提取出分隔符seps,並從中選擇第一個具有多於1個字符的分隔符。使用在最後paste

seps <- strsplit(string, "[^\n]+")[[1]] 
sep <- seps[nchar(seps) > 1][1] # 1st multiple \n separator 

groups <- strsplit(string, "\n\n+")[[1]] 
paste(sub(".*\n", "", groups[1]), groups[2], sep = sep) 

修訂補充說明,並略有改善。

0

可以gsub到第二行的末尾來獲得第三行字符串的結尾。

> gsub('^.*Second line\n', '', string) 
[1] "third line\n\nFourth line\nFifth line" 

或以相同的方式使用strsplit

> strsplit(string, '^.*Second line\n')[[1]][2] 
[1] "third line\n\nFourth line\nFifth line" 

此外,readLines也可以做到這一點。

​​
0

好吧,我增加了一些更多的測試,並出演我覺得行應包括

1:----- 
    First line 
    Second line 
    third line (*) 
    <blank> 
    Fourth line (*) 
    Fifth line (*) 
2:----- 
    <blank> 
    <blank> 
    aaaa 
    bbbbb 
    ccccc (*) 
    dddddd (*) 
    eeeeee (*) 
    ffffff 
    <blank> 
3:----- 
    11111 
    <blank> 
    222222 
    <blank> 
    333333 (*) 
    <blank> 
    4444444 (*) 
    <blank> 
    555555 (*) 

如果是這樣的話,那麼我想這應該找到他們

tests<-c(
    "First line\nSecond line\nthird line\n\nFourth line\nFifth line", 
    "\n\naaaa\nbbbbb\nccccc\ndddddd\neeeeee\nffffff\n", 
    "11111\n\n222222\n\n333333\n\n4444444\n\n555555" 
) 
gsub("^\\n*[^\\n]+\\n+[^\\n]+\\n+([^\\n]+\\n+[^\\n]+\\n+[^\\n]+)[\\s\\S]*", "\\1", tests, perl=T) 
#[1] "third line\n\nFourth line\nFifth line" 
#[2] "ccccc\ndddddd\neeeeee"  
#[3] "333333\n\n4444444\n\n555555" 
相關問題