2016-01-21 96 views
2

我有以下字符串:提取字符串

strings <- c("David, FC; Haramey, S; Devan, IA", 
      "Colin, Matthew J.; Haramey, S", 
      "Colin, Matthew") 

如果我想最後一個字母/給定名稱的所有字符串我可以使用以下命令:

sub(".*, ", "", strings) 
[1] "IA"  "S"  "Matthew" 

這消除了之前的所有最後", "

不過,我停留在如何獲得第一個字母/ givenn AME。我知道必須刪除第一個", "之前的所有內容,但之後必須刪除所有空格,分號(如果有的話)之後的所有內容。

要清楚我想要的輸出是:

c("FC", "Matthew", "Matthew") 

任何指針將是巨大的。

擺弄我能得到第一姓氏gsub(" .*$", "", strings)

回答

3

您可以使用

> gsub("^[^\\s,]+,\\s+([^;.\\s]+).*", "\\1", strings, perl=T) 
[1] "FC"  "Matthew" "Matthew" 

regex demo

說明:

  • ^ - 字符串的開始
  • [^\\s,]+ - 1個或多個字符比空白或,
  • ,其他 - 字面逗號
  • \\s+ - 1或多個空格
  • ([^;.\\s]+) - 第1組1個或多個字符匹配以外;.或空白
  • .* - 零個或多於一個換行符

其他任何字符如果你想使用POSIX般的表達,以[:blank:](或[:space:])更換\\s字符類中(內[...]):

gsub("^[^[:blank:],]+,\\s+([^;.[:blank:]]+).*", "\\1", strings) 
+1

感謝yopu的演示以及答案,所以我可以嘗試神交這一點。 – user1320502

+0

+1用於評論正則表達式的每個部分。這樣一來,它對我們來說就變得不那麼黑魔法了,那就是外行;) – PavoDive