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