繁体   English   中英

R gsub(),正则表达式

[英]R gsub( ) , Regular Expression

我有以下数据

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)

有人可以帮我吗?

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

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

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

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

它只需要输入一个或多个字母,一个非字母,然后再输入一个或多个字母。

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

[AZ|az|.|-|']+实际上匹配AZ| az| (再次) . |-| (这是一个范围)和' 您确实想要[A-Za-z.\\\\-']+

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM