R中的重新匹配不起作用

时间:2013-10-27 16:05:10

标签: regex r

我正在尝试向R中的数据集添加一列。该列应该是名称列的首字母。我正在尝试使用lapply并传入函数来获取首字母 - 但是,我无法使此正则表达式起作用。

pattern <- "(\b[a-zA-Z])"
str<-"MICHAEL,  JENSON F"
m <- regexpr(pattern,str,perl=TRUE)
regmatches(str,m)

返回字符(0)

如何让R返回字符串匹配列表?我希望regmatches返回M J和F.

2 个答案:

答案 0 :(得分:4)

有两个问题:\b必须转义,您应该使用gregexpr代替regexpr,因为后者只返回第一个匹配。

pattern <- "(\\b[a-zA-Z])"
str<-"MICHAEL,  JENSON F"
m <- gregexpr(pattern,str,perl=TRUE)
regmatches(str,m)[[1]]
# [1] "M" "J" "F"

答案 1 :(得分:2)

刚刚找到了stringr库。

str_match_all(str, "(\\b[a-zA-Z])[a-zA-Z]* ?")