从String中提取文本名称

时间:2013-04-03 04:54:44

标签: r

我有一个值为

的列

" RED LOBSTER CA04606"要么 " Red Lobster NewYork WY245"等等

如何从中提取名称Red Lobster或Red Lobster NewYork。我试着使用stringr包。
有没有办法检查它的文本是否只能忽略带有数字的值?

非常感谢任何帮助。谢谢

5 个答案:

答案 0 :(得分:3)

尝试gsub

> x <- "RED LOBSTER CA04606"
> gsub("\\S*\\d+\\S*",'', x)
[1] "RED LOBSTER "

> x<-"Red Lobster NewYork WY245"
> gsub("\\S*\\d+\\S*",'', x)
[1] "Red Lobster NewYork "

> x<-"Red Lobster NewYork WY245 BLUE LOBSTER CA04606"
> gsub("\\S*\\d+\\S*",'', x)
[1] "Red Lobster NewYork  BLUE LOBSTER "

答案 1 :(得分:2)

使用strsplitgrepl

的组合
 sapply(strsplit(x, ' '), function(x) paste(x[!grepl('[[:digit:]]',x)], collapse = ' '))

按空格分割,然后测试是否有数字分割矢量,只粘贴没有数字的那些。

答案 2 :(得分:2)

由于您尝试使用stringr,我建议使用str_extract(即使您没有尝试使用stringr,我也会推荐它):

x <- c('RED LOBTSER CA04606', 'Red Lobster NewYork WY245')
str_extract(x, '[a-zA-Z ]+\\b')
# [1] "RED LOBSTER "          "Red Lobster NewYork "

正则表达式中的'\ b'可防止提取“CA04606”中的“CA”。

如果您不喜欢该尾随空格,可以使用str_trim删除它,或者您可以修改正则表达式:

str_extract(x, '[a-zA-Z]+(?: +[a-zA-Z]+)*\\b')
# [1] "RED LOBSTER"          "Red Lobster NewYork"

注意 - 如果您的字符串在邮政编码后面有非数字,则上述内容仅返回之前的字词。因此,在下面的示例中,如果您想在'WY245'之后获得'NewYork',您可以使用str_extract_all并将结果粘贴在一起:

x <- c(x, 'Red Lobster WY245 NewYork')
str_extract_all(x, '[a-zA-Z]+(?: +[a-zA-Z]+)*\\b')
# [[1]]
# [1] "RED LOBSTER"
# 
# [[2]]
# [1] "Red Lobster NewYork"
# 
# [[3]]
# [1] "Red Lobster" "NewYork"    

# Paste the bits together with paste(..., collapse=' ')
sapply(str_extract_all(x, '[a-zA-Z]+(?: +[a-zA-Z]+)*\\b'), paste, collapse=' ')
# [1] "RED LOBSTER"          "Red Lobster NewYork" "Red Lobster NewYork"

答案 3 :(得分:0)

备用gsub版本:

x <- c("RED LOBSTER CA04606","Red Lobster NewYork WY245")

gsub("(.+)\\s+(.+$)","\\1",x)
[1] "RED LOBSTER"         "Red Lobster NewYork"

并获取文本的其他部分:

gsub("(.+)\\s+(.+$)","\\2",x)
[1] "CA04606" "WY245"  

答案 4 :(得分:0)

这是一步一步

mystr<-"Red Lobster NewYork WY245"
r<-regexpr("[A-Z][A-Z][0-9]+", mystr)
s<-substr(mystr, r[1], r[1] + attr(r, "match.length"))
mystr<-sub(s, "", mystr)