我正在尝试使用-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)),但我不知道如何合并它。
答案 0 :(得分:5)
如果您需要匹配m
或f
,匹配它们的最佳方式是character class(或者,在POSIX术语中,括号表达式):{{1} }。
你的正则表达式看起来像
[mf]
请参阅regex demo
您可以将正则表达式与".*\\)\\s+(.*)\\s+\\([mf]\\).*"
^^^^
一起使用,以确保只执行一次正则表达式匹配和替换(请参阅online demo):
sub
答案 1 :(得分:2)
尝试使用sub
sub("^[^)]+\\)\\s+(\\w+).*", "\\1", name)
#[1] "Bailey" "Blue"