我需要将第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
答案 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}
我们也可以尝试在此处进行子字符串操作,但是我们必须进行一些拼接:
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"