从时间戳%j%Y%H:%M中删除前导零

kil*_*les 7 regex r date

我的时间戳在表格中

0992006 09:00
Run Code Online (Sandbox Code Playgroud)

我需要删除前导零以获取此表单:

992006 9:00
Run Code Online (Sandbox Code Playgroud)

这是我现在使用的代码,它不会删除前导零:

prediction$TIMESTAMP <- as.character(format(prediction$TIMESTAMP, '%j%Y %H:%M'))
Run Code Online (Sandbox Code Playgroud)

hwn*_*wnd 8

最简单的方法是创建自己的边界,断言字符串的开头或空格先行.

gsub('(^| )0+', '\\1', '0992006 09:00')
# [1] "992006 9:00"
Run Code Online (Sandbox Code Playgroud)

您也可以使用诀窍进行替换豁免.\K重置报告的匹配的起始点,不再包括任何以前消耗的字符.

gsub('(^| )\\K0+', '', '0992006 09:00', perl=T)
# [1] "992006 9:00"
Run Code Online (Sandbox Code Playgroud)

或者你可以使用sub和匹配,直到第二组前导零.

sub('^0+([0-9]+ )0+', '\\1', '0992006 09:00')
# [1] "992006 9:00"
Run Code Online (Sandbox Code Playgroud)

并且为了涵盖所有可能性,如果您知道您将拥有类似的格式0992006 00:00,只需+在正则表达式中从零中删除量词,这样它只会删除第一个前导零.

  • +1,这里有很多值得学习的东西谢谢. (2认同)

Dav*_*urg 7

这是使用lookbehind的另一种选择

gsub("(^0)|(?<=\\s)0", "", "0992006 09:00", perl = TRUE)
## [1] "992006 9:00"
Run Code Online (Sandbox Code Playgroud)


akr*_*run 7

str1 <- "0992006 09:00"
gsub("(?<=^| )0+", "", str1, perl=TRUE)
#[1] "992006 9:00"
Run Code Online (Sandbox Code Playgroud)

对于下面的情况,它可能是:

str2 <- "0992006 00:00"
 gsub("(?<=^| )0", "", str2, perl=TRUE)
 #[1] "992006 0:00"
Run Code Online (Sandbox Code Playgroud)

说明

这里的想法是look behind (?<=^| )0+用来匹配0s

如果它出现在字符串的开头 (?<=^

要么 |

如果它跟在一个空格之后 )0+

并替换参数的第二部分匹配0s的那些.""gsub

在第二个字符串中,hour并且minutes都是0's.因此,使用第一个code将导致:

 gsub("(?<=^| )0+", "", str2, perl=TRUE)
 #[1] "992006 :00"
Run Code Online (Sandbox Code Playgroud)

在这里,目前还不清楚OP会接受什么.所以,我想,如果还剩一个,那么不如在整个0之前删除整个s .所以,我将多个代码替换为一个代码并将其替换为.:00+0""