R:在某个角色之后大写一切

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

gsubfngsubfn包中就像gsub替换字符串可以是一个函数.在这里我们匹配_和所有事情之后通过toupper以下方式喂养比赛:

> library(gsubfn)
>
> gsubfn("_.*", toupper, x)
[1] "NYC_23DF"  "BOS_3_RB"  "mgh_3_3_F"
Run Code Online (Sandbox Code Playgroud)

请注意,此方法涉及特别简单的正则表达式.