我的时间戳格式为
0992006 09:00
我需要删除前导零以获取此表单:
992006 9:00
这是我现在使用的代码,它不会删除前导零:
prediction$TIMESTAMP <- as.character(format(prediction$TIMESTAMP, '%j%Y %H:%M'))
答案 0 :(得分:8)
最简单的方法是创建自己的边界,断言字符串的开头或空格先行。
gsub('(^| )0+', '\\1', '0992006 09:00')
# [1] "992006 9:00"
您可以使用诀窍进行替换豁免。 \K
重置报告的匹配的起点,不再包括任何以前消费的字符。
gsub('(^| )\\K0+', '', '0992006 09:00', perl=T)
# [1] "992006 9:00"
或者您可以使用sub
并匹配,直到第二组前导零。
sub('^0+([0-9]+ )0+', '\\1', '0992006 09:00')
# [1] "992006 9:00"
为了涵盖所有可能性,如果你知道你将拥有像0992006 00:00
这样的格式,只需在正则表达式中从零中删除+
量词,这样它只会删除第一个前导零。
答案 1 :(得分:7)
这是使用lookbehind
的另一种选择gsub("(^0)|(?<=\\s)0", "", "0992006 09:00", perl = TRUE)
## [1] "992006 9:00"
答案 2 :(得分:7)
str1 <- "0992006 09:00"
gsub("(?<=^| )0+", "", str1, perl=TRUE)
#[1] "992006 9:00"
对于以下情况,可能是:
str2 <- "0992006 00:00"
gsub("(?<=^| )0", "", str2, perl=TRUE)
#[1] "992006 0:00"
此处的想法是使用look behind
(?<=^| )0+
来匹配0
s
如果它出现在字符串的开头
(?<=^
或|
如果它位于空格)0+
并在0s
参数的第二部分中将匹配的""
替换为gsub
。
在第二个字符串中,hour
和minutes
都是0's
。因此,使用第一个code
会导致:
gsub("(?<=^| )0+", "", str2, perl=TRUE)
#[1] "992006 :00"
目前尚不清楚OP会接受什么。所以,我想,不是在0
之前删除整个:
,而是留下一个0
会更好。因此,我将多个0+
代码替换为一个0
,并将其替换为""
。
答案 3 :(得分:2)
使用sub
:
sub("^[0]+", "", prediction$TIMESTAMP)
[1] "992006 09:00"
答案 4 :(得分:1)
通过使用子字符串,您也可以在没有正则表达式的情况下使用stringr
。
> library(stringr)
> str_c(str_sub(word(x, 1:2), 2), collapse = " ")
# [1] "992006 9:00"
答案 5 :(得分:1)
更多Perl正则表达式,
> gsub("(?<!:)\\b0+", "", "0992006 09:00", perl=T)
[1] "992006 9:00"
> gsub("(?<![\\d:])0+", "", "0992006 09:00", perl=T)
[1] "992006 9:00"