gpt4 book ai didi

regex - R:删除字符串开头的前导零

转载 作者:行者123 更新时间:2023-12-04 14:42:44 24 4
gpt4 key购买 nike

我首先提到了this question ,但答案对我的情况没有帮助。

我有一个列表,其中每个组件都包含以数字开头的元素,后跟单词(字符)。元素开头的一些数字有一个或多个前导零。这是列表的一小部分:

x <- list(el1 = c("0010 First",
"0200 Second",
"0300 Third",
"4000 Fourth",
"0 Undefined",
"60838 Random",
"903200 Haphazard"),
el2 = c("0100 Hundredth",
"0200 Two hundredth",
"0300 Three hundredth",
"0040 Fortieth",
"0 Undefined",
"949848 Random",
"202626 Haphazard"),
el3 = c("0010 First",
"0200 Second",
"0300 Third",
"0100 Hundredth",
"0200 Two hundredth",
"0300 Three hundredth",
"0 Undefined",
"60838 Random",
"20200 Haphazard"))

我想要实现的是删除可用的前导零,并且在 0 Undefined 的开头仍然有单个零。加上所有其他不以前导零开头的元素。也就是说,列表如下:
x <- list(el1 = c("10 First",
"200 Second",
"300 Third",
"4000 Fourth",
"0 Undefined",
"60838 Random",
"903200 Haphazard"),
el2 = c("100 Hundredth",
"200 Two hundredth",
"300 Three hundredth",
"40 Fortieth",
"0 Undefined",
"949848 Random",
"202626 Haphazard"),
el3 = c("10 First",
"200 Second",
"300 Third",
"100 Hundredth",
"200 Two hundredth",
"300 Three hundredth",
"0 Undefined",
"60838 Random",
"20200 Haphazard"))

我已经走了几个小时没有成功。我能做的最好的是:
lapply(x, function(i) {
ifelse(grep(pattern = "^0+[1-9]", x = i),
gsub(pattern = "^0+", replacement = "", x = i), i)
})

然而,它只返回列表组件中那些有前导零的元素,而不是没有和没有 0 Undefined 的其余元素。 .

有人可以帮忙吗?

最佳答案

我们循环遍历 list ( lapply(x, ..) ), 使用 sub替换 list 中的前导零元素。我们匹配字符串开头的多个零之一( ^0+ ),后跟正则表达式前瞻( (?=[1-9]) )指定的数字 1-9 并将其替换为 '' .

lapply(x, function(y) sub('^0+(?=[1-9])', '', y, perl=TRUE))

或者正如评论中提到的@hwnd,我们可以使用捕获组,即代替 lookahead .
lapply(x, function(y) sub('^0+([1-9])', '\\1', y))

或者不使用匿名函数,我们可以指定 patternreplacement sub 的参数
lapply(x, sub, pattern='^0+([1-9])', replacement='\\1')

关于regex - R:删除字符串开头的前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32812340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com