regex - 提取字符串中两个符号之间的所有内容

标签 regex r gsub

我有一个包含一些名称的向量。我想提取每一行的标题,基本上是“,”(包括空格)和“”之间的所有内容。

> 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/

相关文章:

python - 在某些字符串上匹配正则表达式的 URL 非常慢

python - 删除字符串中整数周围的括号

c# - 如果一组符号仅重复,如何使正则表达式匹配?

r - 乘法 ARIMA 模型

r - 为什么 gsubfn 会省略部分匹配项?

正则表达式用可选的逗号和空格替换某个单词

r - 从 R 中的名称获取类向量的最快方法

r - 将数据分组到容器中的简单方法

Ruby 删除以特定字符开头的所有子字符串

regex - 从字符串中提取时钟时间