Re: [問題] 正則表示式 regex in R

看板R_Language作者 (天)時間9年前 (2016/04/29 17:06), 9年前編輯推噓3(301)
留言4則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《cywhale (cywhale)》之銘言: : [問題類型]: : : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : : 若一字串的開頭與結尾只想留下英文字,我寫 : gsub("^[^a-zA-Z]+|[^a-zA-Z]+$", "", x) : 但若結尾是"sp." or "spp." 我想保留"." 這個符號不被上面這個式子濾掉 : 比如 "aaa bbb sp." 就維持原字串 : 但其他情況的"."應該要被濾掉 比如 "aaa bbb22." -> "aaa bbb" : 試了一些?: ?! 等語法都沒抓到,向大家請教~~ 謝謝~ str <- c("aaa bbb sp.", "aaa bbb sp2.") gsub("[^a-zA-Z]*([a-zA-Z. ]+).*", "\\1", str) ^ 這個空格要留著 不然會出事XD # [1] "aaa bbb sp." "aaa bbb sp" 我忘了問 會不會有 "aa2 bb3 cc." 要變成 "aa bb cc." 這種情況了? 有這種情況建議用regmatches,把 "aa", "bb", "cc."都抓出來,再處理QQ 大概像這樣(可能考慮還不夠周延): str <- c("aaa bbb sp.", "aaa bbb sp2.", "aa2 bb3 cc.") sapply(regmatches(str, gregexpr("[a-zA-Z. ]+", str)), function(x){ paste0(x[x != "."], collapse = "") }) # [1] "aaa bbb sp." "aaa bbb sp" "aa bb cc." -- R資料整理套件系列文: magrittr #1LhSWhpH (R_Language) http://tinyurl.com/j3ql84c data.table #1LhW7Tvj (R_Language) http://tinyurl.com/hr77hrn dplyr(上) #1LhpJCfB (R_Language) http://tinyurl.com/jtg4hau dplyr(下) #1Lhw8b-s (R_Language) tidyr #1Liqls1R (R_Language) http://tinyurl.com/jq3o2g3 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.109.74.87 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1461920783.A.7D4.html

04/29 17:14, , 1F
C大厲害,目前case中沒有,但好奇要做該怎麼用呢?請教~
04/29 17:14, 1F
剛剛就在想這個XD 看上面

04/29 17:18, , 2F
另外如果是只保留"sp."這個特定pattern的.,其他濾掉呢?
04/29 17:18, 2F

04/29 17:18, , 3F
比如"aaa ab." --> "aaa ab"
04/29 17:18, 3F
特定的話,可以這樣處理,但我記得有方法做排除,要再查一下XD 這樣處理比較像是硬幹XD str <- c("aaa bbb sp.", "aaa bbb sp2.", "aaa bbb ab.") str_grab <- gsub("[^a-zA-Z]*([a-zA-Z. ]+).*", "\\1", str) str_grab[which(!grepl("sp\\.", str_grab))] <- gsub("([a-zA-Z ]+)\\.*", "\\1", str_grab[which(!grepl("sp\\.", str_grab))]) str_grab # [1] "aaa bbb sp." "aaa bbb sp" "aaa bbb ab" ※ 編輯: celestialgod (140.109.74.87), 04/29/2016 17:38:23

04/29 22:47, , 4F
甘溫啊~~ 我測試一下,順便也來查查看~先謝了!
04/29 22:47, 4F
文章代碼(AID): #1N8oGFVK (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1N8oGFVK (R_Language)