我有以下字符串:
x <- "??????????DRHRTRHLAK??????????"
x2 <- "????????????????????TRCYHIDPHH"
x3 <- "FKDHKHIDVK????????????????????TRCYHIDPHH"
x4 <- "FKDHKHIDVK????????????????????"
我想做的是用另一个字符串替换所有 ?
字符
rep <- "ndqeegillkkkkfpssyvv"
结果是:
ndqeegillkDRHRTRHLAKkkkfpssyvv # x
ndqeegillkkkkfpssyvvTRCYHIDPHH # x2
FKDHKHIDVKndqeegillkkkkfpssyvvTRCYHIDPHH # x3
FKDHKHIDVKndqeegillkkkkfpssyvv # x4
基本上,保持rep
的顺序替换为x
中的交错字符DRHRTRHLAK
。
< code>rep的总长度与< code >的总长度相同?,20个字符。
请注意,我不想作为额外的步骤再次手动拆分< code>rep。
我尝试了这个,但失败了:
>gsub(pattern = "\\?+", replacement = rep, x = x)
[1] "ndqeegillkkkkfpssyvvDRHRTRHLAKndqeegillkkkkfpssyvv"
你可以数数 ?s,然后基于此削减代表
:
x <- "??????????DRHRTRHLAK??????????"
rep <- "ndqeegillkkkkfpssyvv"
pattern <- "(\\?+)(DRHRTRHLAK)(\\?+)"
n <- nchar(gsub(pattern, "\\1", x))
gsub(pattern, paste0(substr(rep, 1, n), "\\2", substr(rep, n+1, nchar(rep))), x)
#[1] "ndqeegillk??????????kkkfpssyvv"
一个非常冗长的方法是执行if-else链,检查在哪里s是,并相应地替换rep
。
if(grepl("^\\?.+\\?$", x)){ #?'s on both ends
n <- gsub(pattern, "\\1", x) %>% nchar()
gsub(pattern, paste0(substr(rep, 1, n), "\\2", substr(rep, n+1, nchar(rep))), x)
} else if(grepl("^\\?", x)){ #?'s only on start
n <- gsub(pattern, "\\1", x) %>% nchar()
gsub(pattern, paste0(substr(rep, 1, n), "\\2"), x)
} else if(grepl("\\?$", x)){ #?'s only on end
n <- gsub(pattern, "\\2", x) %>% nchar()
gsub(pattern, paste0("\\2", substr(rep, 1, n)), x)
} else if(grepl("^[A-Z]+\\?+[A-Z]+$", x)){ #?'s only on middle
n <- gsub(pattern, "\\2", x) %>% nchar()
gsub("([A-Z]+)\\?+([A-Z]+)", paste0("\\1", substr(rep, 1, n), "\\2"), x)
}
使用 substr()
进行字符串拆分:
x <- "??????????DRHRTRHLAK??????????"
rep <- "ndqeegillkkkkfpssyvv"
x<-gsub(pattern = "^\\?+", replacement = substr(rep, 1, 10), x = x)
x<-gsub(pattern = "\\?+$", replacement = substr(rep, 11, 20), x = x)
x
#[1] "ndqeegillkDRHRTRHLAKkkkfpssyvv"
Regex^
匹配开始,而$
则匹配结束。
示例数据:
x <- c(
"??????????DRHRTRHLAK??????????",
"????????????????????TRCYHIDPHH",
"FKDHKHIDVK????????????????????TRCYHIDPHH"
)
rep <- "ndqeegillkkkkfpssyvv"
使用正则表达式修复它
gr <- gregexpr("\\?+", x)
csml <- lapply(gr, \(x) cumsum(attr(x, "match.length")) )
regmatches(x, gr) <- lapply(csml, \(x) substring(rep, c(1,x[-length(x)]+1), x))
#[1] "ndqeegillkDRHRTRHLAKkkkfpssyvv"
#[2] "ndqeegillkkkkfpssyvvTRCYHIDPHH"
#[3] "FKDHKHIDVKndqeegillkkkkfpssyvvTRCYHIDPHH"
问题内容: 我有以下数据框 我想更换和使用,所以最终的数据帧 我尝试了以下操作,但没有成功: 问题答案: 解决方案与通过: 如果需要将列中的所有值设置为一些:
我想在java中将所有“特殊字符”替换为特殊字符 例如“现金” 我有一个示例CSV文件 这里的CSV标题是“What”和“Where” 预期产出 示例代码如下 所有特殊字符、所有空格和双引号都应删除并替换为所需的输出。 我使用的是值。replaceAll(“[^A-Za-z0-9]”,“”),但它不工作。 错误 感谢您的帮助。regex的新成员。
我有以下数据框 我想用替换和,因此最终的数据帧是 我尝试了以下方法,但不起作用:
问题内容: 假设我有以下代码: 这段代码运行后,价值会 如果我以相反的顺序替换它们,则会发生类似的问题: 的值将是 我的目标是把成我怎么能做到呢? 问题答案: 使用Apache Commons StringUtils中的方法:
问题内容: 我有一些带有数字和英文单词的字符串,我需要通过找到它们并将其替换为该单词的本地化版本,将它们翻译成我的母语。您知道如何轻松实现替换字符串中的单词吗? 谢谢 编辑: 我已经尝试过(字符串“ to”的一部分应替换为“ xyz”): 但这不起作用… 问题答案: 它正在工作,但是不会修改调用者对象,而是返回一个新的String。 因此,您只需要将其分配给新的String变量或自身即可: 要么
问题内容: 我想做这个: 我基本上想返回字符串:{(str)-> str} 我一直在获取未定义的变量。 抱歉,这是我的第一篇文章。 问题答案: 由于Python中的字符串是不可变的,因此每次使用该方法时,都必须创建一个新字符串。每次替换调用也必须遍历整个字符串。这显然是低效的,尽管在此规模上并不明显。 一种替代方法是使用列表组合(docs,tutorial)一次遍历字符串并创建一个新字符列表。该方