gpt4 book ai didi

string - 在字符串中的特定位置插入字符

转载 作者:行者123 更新时间:2023-12-03 06:05:13 25 4
gpt4 key购买 nike

我想在字符串中的特定位置插入额外的字符(或新字符串)。例如,我想在 abcefg 的第四个位置插入 d 以获得 abcdefg

现在我正在使用:

old <- "abcefg"
n <- 4
paste(substr(old, 1, n-1), "d", substr(old, n, nchar(old)), sep = "")

我可以为这项任务编写一个单行简单函数,但我只是好奇是否有一个现有的函数可以实现这一点。

最佳答案

您可以使用正则表达式和 gsub 来完成此操作。

gsub('^([a-z]{3})([a-z]+)$', '\\1d\\2', old)
# [1] "abcdefg"

如果您想动态执行此操作,可以使用paste创建表达式:

letter <- 'd'
lhs <- paste0('^([a-z]{', n-1, '})([a-z]+)$')
rhs <- paste0('\\1', letter, '\\2')
gsub(lhs, rhs, old)
# [1] "abcdefg"
<小时/>

根据 DWin 的评论,您可能希望这更通用。

gsub('^(.{3})(.*)$', '\\1d\\2', old)

这样任何三个字符都会匹配,而不仅仅是小写。 DWin 还建议使用 sub 而不是 gsub。这样您就不必担心 ^ ,因为 sub 只会匹配第一个实例。但我喜欢在正则表达式中明确表达,只有当我理解它们并发现需要更通用时才会转向更通用的表达式。

<小时/>

正如 Greg Snow 所说,您可以使用另一种形式的正则表达式来查看匹配项:

sub( '(?<=.{3})', 'd', old, perl=TRUE )

并且还可以使用 sprintf 而不是 paste0 构建上面的动态 gsub:

lhs <- sprintf('^([a-z]{%d})([a-z]+)$', n-1) 

或者他的sub正则表达式:

lhs <- sprintf('(?<=.{%d})',n-1)

关于string - 在字符串中的特定位置插入字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13863599/

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