Mik*_*kko 16 regex r capitalization
我想把第一个后面的字符向量中的所有内容都大写_.例如,以下向量:
x <- c("NYC_23df", "BOS_3_rb", "mgh_3_3_f")
Run Code Online (Sandbox Code Playgroud)
应该这样出来:
"NYC_23DF" "BOS_3_RB" "mgh_3_3_F"
Run Code Online (Sandbox Code Playgroud)
我一直试图使用正则表达式,但我无法做到这一点.任何建议,将不胜感激.
Ben*_*ker 23
你非常接近:
gsub("(_.*)","\\U\\1",x,perl=TRUE)
Run Code Online (Sandbox Code Playgroud)
似乎工作.您只需要使用_.*(下划线后跟零个或多个其他字符)而不是_*(零个或多个下划线)......
更多地分开这个:
_.*给出一个正则表达式模式,该模式匹配下划线,_后跟任意数字(包括0)的附加字符; .表示"任何字符"并*表示"前一个元素的零个或多个重复"()表示它是我们想要存储的模式\\1 在替换字符串中说"插入第一个匹配模式的内容",即匹配的任何内容 _.*\\U,结合使用perl=TRUE,表示"将_大小写后面的内容"(大写不起作用;如果我们想在(例如)小写g之后将所有内容都大写,我们需要从存储的模式中排除g并包括它在替换模式:gsub("g(.*)","g\\U\\1",x,perl=TRUE))有关更多详细信息,请搜索"替换"和"大写" ?gsub(以及?regexp有关正则表达式的一般信息)
G. *_*eck 12
gsubfn在gsubfn包中就像gsub替换字符串可以是一个函数.在这里我们匹配_和所有事情之后通过toupper以下方式喂养比赛:
> library(gsubfn)
>
> gsubfn("_.*", toupper, x)
[1] "NYC_23DF" "BOS_3_RB" "mgh_3_3_F"
Run Code Online (Sandbox Code Playgroud)
请注意,此方法涉及特别简单的正则表达式.