0

我有以下数据

Names[]
[1] John Simon is a great player
[2] Chi-Twi is from china
[3] O'Konnor works hard
[4] R.F is a swimmer

我只需要从所有这些行中提取名称并存储它们。我试过这样做。

[1] John Simon 
[2] Chi-Twi 
[3] O'Konnor 
[4] R.F 

names = gsub("(^[A-Z|a-z|.|-|']+[ ]+[A-Z|a-z|.|-|]+)[ ]+.*", "\\1",names)

有人可以帮我吗?

4

2 回答 2

0

根据@nhahtdh 的评论,您可以使用

sub("(^\\w+\\W\\w+).*", "\\1", Names)
# [1] "John Simon" "Chi-Twi"    "O'Konnor"   "R.F"       
于 2013-12-18T13:52:38.077 回答
0

这是一个适用于此示例数据的正则表达式:

names = gsub("(^[A-Za-z]+[^A-Za-z][A-Za-z]+)", "\\1", names)

如果下划线是名字或姓氏中的有效字符,您可以将其缩短为:

names = gsub("(^\\w+\\W\\w+)", "\\1", names)

它只需要一个或多个字母,一个非字母,然后是一个或多个字母。

我在您的正则表达式中发现了一些错误:

[A-Z|a-z|.|-|']+实际上匹配A-Z, |, a-z, |(再次),., |-|(这是一个范围)和'. 你真的很想要[A-Za-z.\\-']+

无论如何,这是错误的,您不想在名字中包含点或破折号。

于 2013-12-18T13:15:06.073 回答