使用gsub在多个单词之间提取字符串

时间:2016-11-21 09:26:47

标签: r regex gsub

我正在尝试使用-gsub-从R中的字符串中隔离单词。我想提取一个名字,可以在"("和"(m)"(男性)或"("和&)之间找到#34;(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)),但我不知道如何合并它。

2 个答案:

答案 0 :(得分:5)

如果您需要匹配mf,匹配它们的最佳方式是character class(或者,在POSIX术语中,括号表达式):{{1} }。

你的正则表达式看起来像

[mf]

请参阅regex demo

您可以将正则表达式与".*\\)\\s+(.*)\\s+\\([mf]\\).*" ^^^^ 一起使用,以确保只执行一次正则表达式匹配和替换(请参阅online demo):

sub

答案 1 :(得分:2)

尝试使用sub

sub("^[^)]+\\)\\s+(\\w+).*", "\\1", name)
#[1] "Bailey" "Blue"