gpt4 book ai didi

regex - R删除重复的数字序列

转载 作者:行者123 更新时间:2023-12-04 10:38:24 25 4
gpt4 key购买 nike

我正在尝试删除字符串中除第一组数字之外的所有数字。因此,换句话说,所有重复的数字集,字符串中可能有 1 组或 10 组以上,但我只想保留第一组和字符串的其余部分。

例如,以下字符串:

x <- 'foo123bar123baz123456abc1111def123456789'

结果将是:
foo123barbazabcdef

我曾尝试使用 gsub 并用空字符串替换 \d+ 但这会替换字符串中的所有数字,我也尝试使用组来捕获一些结果但没有运气。

最佳答案

使用 gsub,您可以使用 \G 功能,这是一个可以匹配两个位置之一的 anchor 。

x <- 'foo123bar123baz123456abc1111def123456789'
gsub('(?:\\d+|\\G(?<!^)\\D*)\\K\\d*', '', x, perl=T)
# [1] "foo123barbazabcdef"

说明 :
(?:           # group, but do not capture:
\d+ # digits (0-9) (1 or more times)
| # OR
\G(?<!^) # contiguous to a precedent match, not at the start of the string
\D* # non-digits (all but 0-9) (0 or more times)
)\K # end of grouping and reset the match from the result
\d* # digits (0-9) (0 or more times)

或者,您可以使用可选组:
gsub('(?:^\\D*\\d+)?\\K\\d*', '', x, perl=T)

我认为有用且不需要 (*SKIP)(*F) 回溯动词或 \G\K 功能的另一种方法是在上下文中使用 alternation 运算符,将要匹配的内容放在左侧的捕获组中,并将要排除的内容放在右侧,(说扔掉,这是垃圾...)
gsub('^(\\D*\\d+)|\\d+', '\\1', x)

关于regex - R删除重复的数字序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27210576/

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