使用 gsub 在多个单词之间提取字符串
Extract string between multiple words, using gsub
我正在尝试使用 -gsub- 从 R 中的字符串中分离单词。我想提取一个可以在“(”和“(m)”(男性)之间或“(”和“(f)”之间找到的名字。我正在努力合并一行代码。
name<-c("Dr. T. (Tom) Bailey (m), UCL- Physics" , "Dr. B.K. (Barbara) Blue (f), Oxford - Political Science")
malename<-gsub(".*\) (.*) \(m).*", "\1", name)
femname<-gsub(".*\) (.*) \(f).*", "\1", name)
上面的代码分别给出了男性和女性的名字,但理想情况下我想在一个变量中获取他们的姓氏。这将涉及一些 OR 函数(so (m) OR (f)),但我不知道如何合并它。
试试 sub
sub("^[^)]+\)\s+(\w+).*", "\1", name)
#[1] "Bailey" "Blue"
如果您需要匹配 m
或 f
,最好的匹配方式是 character class(或者,在 POSIX 术语中,括号表达式): [mf]
.
你的正则表达式看起来像
".*\)\s+(.*)\s+\([mf]\).*"
^^^^
查看 regex demo
您可以将正则表达式与 sub
一起使用,以确保只执行一个正则表达式匹配和替换(参见 online demo):
name<-c("Dr. T. (Tom) Bailey (m), UCL- Physics" , "Dr. B.K. (Barbara) Blue (f), Oxford - Political Science")
res <- sub(".*\)\s+(.*)\s+\([mf]\).*", "\1", name)
res
## => [1] "Bailey" "Blue"
我正在尝试使用 -gsub- 从 R 中的字符串中分离单词。我想提取一个可以在“(”和“(m)”(男性)之间或“(”和“(f)”之间找到的名字。我正在努力合并一行代码。
name<-c("Dr. T. (Tom) Bailey (m), UCL- Physics" , "Dr. B.K. (Barbara) Blue (f), Oxford - Political Science")
malename<-gsub(".*\) (.*) \(m).*", "\1", name)
femname<-gsub(".*\) (.*) \(f).*", "\1", name)
上面的代码分别给出了男性和女性的名字,但理想情况下我想在一个变量中获取他们的姓氏。这将涉及一些 OR 函数(so (m) OR (f)),但我不知道如何合并它。
试试 sub
sub("^[^)]+\)\s+(\w+).*", "\1", name)
#[1] "Bailey" "Blue"
如果您需要匹配 m
或 f
,最好的匹配方式是 character class(或者,在 POSIX 术语中,括号表达式): [mf]
.
你的正则表达式看起来像
".*\)\s+(.*)\s+\([mf]\).*"
^^^^
查看 regex demo
您可以将正则表达式与 sub
一起使用,以确保只执行一个正则表达式匹配和替换(参见 online demo):
name<-c("Dr. T. (Tom) Bailey (m), UCL- Physics" , "Dr. B.K. (Barbara) Blue (f), Oxford - Political Science")
res <- sub(".*\)\s+(.*)\s+\([mf]\).*", "\1", name)
res
## => [1] "Bailey" "Blue"