簡體   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