R:删除子字符串并通过添加数字来更改剩余的字符串

Posted

技术标签:

【中文标题】R:删除子字符串并通过添加数字来更改剩余的字符串【英文标题】:R: remove substring and change the remaining string by addition of a number 【发布时间】:2022-01-05 07:27:57 【问题描述】:

在 R 中:我有一些带有以下字母和数字模式的字符串

A11B3XyC4
A1B14C23XyC16
B14C23XyC16D3
B14C23C16D3

我想删除“Xy”部分(总是相同的字母),当我这样做时,我想将字母 B 后面的数字加一(其他一切都应该保持不变)。 当字符串中没有“Xy”时,字符串没有变化 结果应如下所示:

A11B4C4
A1B15C23C16
B15C23C16D3
B14C23C16D3

你能给我指出一个能够做到这一点的功能吗?我很难用字符串进行计算 (x+1)。

谢谢!

【问题讨论】:

【参考方案1】:

我们可以使用str_replace在删除“Xy”后对“B”字符串后面的数字子字符串进行递增,仅适用于case_when中有“Xy”子字符串的情况

library(stringr)
library(dplyr)
case_when(str_detect(str1, "Xy") ~ str_replace(str_remove(str1, 
   "Xy"), "(?<=B)(\\d+)", function(x) as.numeric(x) + 1), TRUE  ~str1)
[1] "A11B4C4"     "A1B15C23C16" "B15C23C16D3" "B14C23C16D3"

数据

str1 <- c("A11B3XyC4", "A1B14C23XyC16", "B14C23XyC16D3", "B14C23C16D3")

【讨论】:

非常感谢!这很完美。我不知道“case_when”——看起来真的很方便! @akrun:和蔼可亲。当您在此构造中调用函数 function(x) as.numeric(x) +1 ) 时,它是如何命名的。因此,对于 str_replace 中的替换参数,您将 B 更改为数字后的第一个数字并加 1。因此,您可以像在 my_func @TarJae (?&lt;=B) 是一个正则表达式环视,(\\d+) 被捕获为一个组 - 即一个或多个数字。这个捕获的组通过在替换中传递一个函数并添加 1 来转换为数字 @TarJae 根据?str_replace - replacement - Alternatively, pass a function to replacement: it will be called once for each match and its return value will be used to replace the match.

以上是关于R:删除子字符串并通过添加数字来更改剩余的字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何更改python字符串子字符串信息

[在python中使用正则表达式搜索字符串子字符串

PB中取字符串子串的函数是啥

PB中取字符串子串的函数是啥

求字符串不同子串个数

使用 Python 的字符串子序列内核和 SVM