我有一个包含一些名称的向量。我想提取每一行的标题,基本上是“,”(包括空格)和“”之间的所有内容。
> head(combi$Name)
[1] "Braund, Mr. Owen Harris"
[2] "Cumings, Mrs. John Bradley (Florence Briggs Thayer)"
[3] "Heikkinen, Miss. Laina"
[4] "Futrelle, Mrs. Jacques Heath (Lily May Peel)"
[5] "Allen, Mr. William Henry"
[6] "Moran, Mr. James"
我想
gsub
可能会有用,但是我很难找到合适的正则表达式来满足我的需求。
最佳答案
1)用sub
子
> sub(".*, ([^.]*)\\..*", "\\1", Name)
[1] "Mr" "Mrs" "Miss" "Mrs" "Mr" "Mr"
1a)子变体这种使用
gsub
的方法也适用:> sub(".*, |\\..*", "", Name)
[1] "Mr" "Mrs" "Miss" "Mrs" "Mr" "Mr"
2)strapplyc 或在gusbfn包中使用
strapplyc
,可以使用更简单的正则表达式来完成:> library(gsubfn)
>
> strapplyc(Name, ", ([^.]*)\\.", simplify = TRUE)
[1] "Mr" "Mrs" "Miss" "Mrs" "Mr" "Mr"
2a)绑带变体这似乎是所有元素中最简单的正则表达式。
> library(gsubfn)
>
> sapply(strapplyc(Name, "\\w+"), "[", 2)
[1] "Mr" "Mrs" "Miss" "Mrs" "Mr" "Mr"
3)strsplit 第三种方法是使用
strsplit
> sapply(strsplit(Name, ", |\\."), "[", 2)
[1] "Mr" "Mrs" "Miss" "Mrs" "Mr" "Mr"
添加了其他解决方案。将
gsub
更改为sub
(尽管gsub
也可以)。
关于regex - 提取字符串中两个符号之间的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21813022/