0

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

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

返回字符(0)

如何让 R 返回字符串的匹配列表?我希望正则匹配返回 MJ 和 F。

4

2 回答 2

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"
于 2013-10-27T16:22:38.530 回答
2

刚刚弄清楚了stringr库。

str_match_all(str, "(\\b[a-zA-Z])[a-zA-Z]* ?")
于 2013-10-27T16:22:02.547 回答