我有以下数据
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)
有人可以帮助我吗?
答案 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"