作者celestialgod (天)
看板R_Language
标题Re: [问题] 正则表示式 regex in R
时间Fri Apr 29 17:06:18 2016
※ 引述《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://webptt.com/cn.aspx?n=bbs/R_Language/M.1461920783.A.7D4.html
1F:推 cywhale: C大厉害,目前case中没有,但好奇要做该怎麽用呢?请教~ 04/29 17:14
刚刚就在想这个XD 看上面
2F:推 cywhale: 另外如果是只保留"sp."这个特定pattern的.,其他滤掉呢? 04/29 17:18
3F:→ cywhale: 比如"aaa ab." --> "aaa ab" 04/29 17:18
特定的话,可以这样处理,但我记得有方法做排除,要再查一下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
4F:推 cywhale: 甘温啊~~ 我测试一下,顺便也来查查看~先谢了! 04/29 22:47