我正在尝试格式化data.frame
中的某些字符串,并且仅当第二个字符是字母时,我想删除前导零:
3818119 --> 3818119
0M11936 --> M11936
0X11087 --> X11087
0T05060 --> T05060
到目前为止,我已经尝试了几种方法,最后一种gsub("^(?=[^A-Z]{2})","" ,output$id)
和gsub("/^..[a-z]/","" ,output$id)
,但都没有成功。
答案 0 :(得分:7)
您可以使用
sub("^0([[:alpha:]])", "\\1" ,output$id)
模式匹配
^
-字符串的开头0
-零([[:alpha:]])
-第1组(\1
):一封信如果只考虑大写ASCII字母,请使用
sub("^0([A-Z])", "\\1" ,output$id)
您尝试编写的环视版本需要使用perl=TRUE
启用的PCRE引擎:
sub("^0(?=[A-Z])", "", output$id, perl=TRUE)
x <- c("3818119", "0M11936", "0X11087", "0T05060")
sub("^0([[:alpha:]])", "\\1", x)
sub("^0([A-Z])", "\\1", x)
sub("^0(?=[A-Z])", "", x, perl=TRUE)
注意。如果开头有多个0
个字符,请在+
之后添加0
。
答案 1 :(得分:0)
假设您还想删除字符串中的多个前导零,那么也许您可以尝试下面的代码
gsub("^0+([[:alpha:]].*)","\\1",s)
如此
> gsub("^0+([[:alpha:]].*)","\\1",s)
[1] "M11936" "M11936" "M11936" "01111"
数据
s <- c("M11936","0M11936","00M11936","01111")