R gsub(),正则表达式

时间:2013-09-12 21:40:53

标签: regex r

我有以下数据

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)

有人可以帮助我吗?

2 个答案:

答案 0 :(得分: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.\\-']+

无论如何,这是错误的,你不想在名字中包含点或短划线。

答案 1 :(得分:0)

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

sub("(^\\w+\\W\\w+).*", "\\1", Names)
# [1] "John Simon" "Chi-Twi"    "O'Konnor"   "R.F"