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

作者: celestialgod (天)   2016-04-29 17:06:18
※ 引述《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."
作者: cywhale (cywhale)   2016-04-29 17:14:00
C大厲害,目前case中沒有,但好奇要做該怎麼用呢?請教~另外如果是只保留"sp."這個特定pattern的.,其他濾掉呢?比如"aaa ab." --> "aaa ab"甘溫啊~~ 我測試一下,順便也來查查看~先謝了!

Links booklink

Contact Us: admin [ a t ] ucptt.com