当前位置:  开发笔记 > 开发工具 > 正文

在R中首次出现特殊字符之前获取所有字符

如何解决《在R中首次出现特殊字符之前获取所有字符》经验,为你挑选了1个好方法。

我希望得到所有超过第一个"."的角色.如果有的话.否则,我想找回相同的字符("8" - >"8").

例:

v<-c("7.7.4","8","12.6","11.5.2.1")

我想得到这样的东西:

[1] "7 "8" "12" "11"

我的想法是将每个元素拆分为"." 然后只进行第一次拆分.我找不到有效的解决方案......



1> Jota..:

您可以使用 sub

sub("\\..*", "", v)
#[1] "7"  "8"  "12" "11"

或几个stringi选项:

library(stringi)
stri_replace_first_regex(v, "\\..*", "")
#[1] "7"  "8"  "12" "11"
# extract vs. replace
stri_extract_first_regex(v, "[^\\.]+")
#[1] "7"  "8"  "12" "11"

如果您想使用拆分方法,这些方法将起作用:

unlist(strsplit(v, "\\..*"))
#[1] "7"  "8"  "12" "11"

# stringi option
unlist(stri_split_regex(v, "\\..*", omit_empty=TRUE))
#[1] "7"  "8"  "12" "11"
unlist(stri_split_fixed(v, ".", n=1, tokens_only=TRUE))
unlist(stri_split_regex(v, "[^\\w]", n=1, tokens_only=TRUE))

sub使用捕获组专门针对主要角色的其他变体:

sub("(\\w+).+", "\\1", v) # \w matches [[:alnum:]_] (i.e. alphanumerics and underscores)
sub("([[:alnum:]]+).+", "\\1", v) # exclude underscores

# variations on a theme
sub("(\\w+)\\..*", "\\1", v)
sub("(\\d+)\\..*", "\\1", v) # narrower: \d for digits specifically
sub("(.+)\\..*", "\\1", v) # broader: "." matches any single character

# stringi variation just for fun:
stri_extract_first_regex(v, "\\w+")

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有