我想把字符向量中第一个_
之后的所有字符都大写。
x <- c("NYC_23df", "BOS_3_rb", "mgh_3_3_f")
应该这样出来:
"NYC_23DF" "BOS_3_RB" "mgh_3_3_F"
我一直在尝试玩regular expressions,但我不能做到这一点。任何建议都将不胜感激。
我想把字符向量中第一个_
之后的所有字符都大写。
x <- c("NYC_23df", "BOS_3_rb", "mgh_3_3_f")
应该这样出来:
"NYC_23DF" "BOS_3_RB" "mgh_3_3_F"
我一直在尝试玩regular expressions,但我不能做到这一点。任何建议都将不胜感激。
3条答案
按热度按时间oxf4rvwz1#
你们非常接近:
看起来很有效。你只需要使用
_.*
(下划线后面跟着零个或多个其他字符)而不是_*
(零个或多个下划线)...进一步分析一下:
_.*
给出了一个正则表达式模式,该模式匹配下划线_
后跟任意数量(包括0)的附加字符;.
表示“任何字符”,而*
表示“前一元素的零个或多个重复”()
括住这个正则表达式表示它是我们要存储的模式\\1
表示“插入第一个匹配模式的内容”,即无论匹配的是什么_.*
\\U
与perl=TRUE
一起表示“将以下内容大写”(大写的_
没有任何作用;如果我们想大写小写g之后的所有内容,我们需要从存储的模式中排除g,并将其包含在替换模式中:(一个月12个月1x个月)有关更多详细信息,请在
?gsub
中搜索“replacement”和“capitalizing”(有关正则表达式的一般信息,请在?regexp
中搜索)scyqe7ek2#
gsubfn package中的
gsubfn
类似于gsub
,只是替换字符串可以是函数。这里我们使用match _以及之后通过toupper
提供匹配的所有内容:请注意,此方法涉及一个特别简单的正则表达式。
5sxhfpxr3#
使用
base::strsplit
的简单示例使用stringr软件包的示例