子串替换第n个位置R

时间:2018-08-29 10:41:57

标签: r

我需要将第6、7、8个位置替换为“ _”。在子字符串中,我提到了开始和停止位置。没用

> a=c("UHI786KJRH2V", "TYR324FHASJKDG","DHA927NFSYFN34")
> substring(a, 6,8) <- "_"
> a
[1] "UHI78_KJRH2V"   "TYR32_FHASJKDG" "DHA92_NFSYFN34"

我需要UHI78_RH2V TYR32_ASJKDG DHA92_SYFN34

3 个答案:

答案 0 :(得分:2)

使用 Collections.sort(EventArrayList, new Comparator<EventObject>() { @Override public int compare(EventObject o1, EventObject o2) { if (o2.getDateAndTime() == null || o1.getDateAndTime() == null) return 0; return o2.getDateAndTime().compareTo(o1.getDateAndTime()); } }); ,我们可以匹配模式sub,然后将其替换为单个下划线:

(?<=^.{5}).{3}

Demo

我们也可以尝试在此处进行子字符串操作,但是我们必须进行一些拼接:

a <- c("UHI786KJRH2V", "TYR324FHASJKDG","DHA927NFSYFN34")
out <- sub("(?<=^.{5}).{3}", "_", a, perl=TRUE)
out
[1] "UHI78_RH2V"   "TYR32_ASJKDG" "DHA92_SYFN34"

答案 1 :(得分:1)

1)str_sub <-在stringr程序包中的str_sub<-替换功能可以做到这一点。

library(stringr)

str_sub(a, 6, 8) <- "_"
a
## [1] "UHI78_RH2V"   "TYR32_ASJKDG" "DHA92_SYFN34"

2 Base R (仅R),您可以执行此操作。它将整个字符串替换为与第一个捕获组的匹配项,下划线和与第二个捕获组的匹配项。

sub("(.....)...(.*)", "\\1_\\2", a)
## [1] "UHI78_RH2V"   "TYR32_ASJKDG" "DHA92_SYFN34"

该正则表达式也可以写为"(.{5}).{3}(.*)"

3)分离/合并如果a是数据框中的一列,那么我们可以使用dplyr和tidyr来做到这一点:

library(dplyr)
library(tidyr)
DF <- data.frame(a)

DF %>% 
  separate(a, into = c("pre", "junk", "post"), sep = c(5, 8)) %>%
  select(-junk) %>% 
  unite(a)

给予:

             a
1   UHI78_RH2V
2 TYR32_ASJKDG
3 DHA92_SYFN34

答案 2 :(得分:0)

从文档中:

  

如果要替换的部分比替换字符串长,则仅替换字符串长度的部分。

所以我们可以做这样的事情:

substring(a, 6,8) <- "_@@"
sub("@+", "", a)
[1] "UHI78_RH2V"   "TYR32_ASJKDG" "DHA92_SYFN34"