R语言按层级规则在X或Y前插入字符的最优实现方法问询
R字符串替换需求实现方案
公共示例数据如下:
test.dat <- c("abcde", "abcXe", "abcdY", "abcXY", "abYcXY", "abcYX")
场景1实现方案
需求说明
在X或Y前插入字符"1",若字符串同时存在X和Y时,仅在X前插入"1",期望结果:
test.want1 <- c("abcde", "abc1Xe", "abcd1Y", "abc1XY", "abYc1XY", "abcY1X")
代码实现
仅需单次str_replace即可完成,利用正则零宽断言匹配插入位置:
library(stringr) result1 <- str_replace(test.dat, "(?=X)|(?<!.*X)(?=Y)", "1") # 验证结果匹配 identical(result1, test.want1) # 输出 TRUE
逻辑说明
正则匹配两类合法插入位置:
- 任意X字符前的位置
- 字符串中不存在X时,Y字符前的位置
直接在匹配到的位置插入"1"即可满足需求,无需分支判断。
场景2实现方案
需求说明
在字符串中第一个出现的X或Y前插入字符"1",期望结果:
test.want2 <- c("abcde", "abc1Xe", "abcd1Y", "abc1XY", "ab1YcXY", "abc1YX")
代码实现
同样可通过单次str_replace完成:
result2 <- str_replace(test.dat, "(?=[XY])", "1") # 验证结果匹配 identical(result2, test.want2) # 输出 TRUE
逻辑说明
(?=[XY])为正向先行断言,匹配字符串中第一个出现的X或Y字符的前置位置,直接插入"1"即可实现需求。
内容的提问来源于stack exchange,提问作者aiorr
相关产品推荐
相关产品推荐

