【问题标题】:R gsub insert into large stringR gsub 插入大字符串
【发布时间】:2021-11-14 07:09:57
【问题描述】:

我想将子字符串"A" 插入长度> 65536 的字符串n 的位置。我正在使用 gsub 来执行此操作,因为它非常有效。

n = 5
text <- paste(rep("a", 70000), collapse = "")
lhs <- '^(.{n})(.*)$'
rhs <- '\\1A\\2'
gsub(lhs, rhs, text, perl=TRUE)

当我选择 n 较小时,例如5、代码运行正常。但是,如果 n = 66000 显示以下错误消息:

In gsub(lhs, rhs, text, perl = TRUE) : PCRE pattern compilation error
    'number too big in {} quantifier'
    at '})(.*)$'

我该如何解决这个问题?

【问题讨论】:

  • 似乎 PCRE 在限制量词时对 max 参数实施了一些限制。它仍然令人印象深刻,因为 TRE 在同一个结构中只有 256 个字符的限制。你试过stringr::str_replace吗?在这种情况下可能更可靠。
  • 另一个想法是将构造拆分为多个部分:gsub('^(.{n/2})(.{n/2})(.*)$', '\\1\\2A\\3', text, perl=TRUE)(当然是伪)。

标签: r regex gsub


【解决方案1】:

由于模式长度限制,您似乎无法在此处使用sub。但实际上,对于这个问题,基本字符串函数应该可以工作,而且可能会更有效:

insertA <- function(x, n) {
    return(paste0(substring(x, 1, n-1), "A", substring(x, n, nchar(x))))
}

text <- paste(rep("a", 30), collapse = "")
insertA(text, 5)

[1] "aaaaAaaaaaaaaaaaaaaaaaaaaaaaaaa"

这种方法只是使用substringpasteA 字符拆分为用户选择的任何两半。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多