Regex R:gsub,精确完整字符串,固定=T
我正在尝试Regex R:gsub,精确完整字符串,固定=T,regex,r,gsub,Regex,R,Gsub,我正在尝试gsub精确的完整字符串-我知道我需要使用^和$。问题是我的字符串中有特殊字符(可能是[或),因此我需要使用fixed=T。这会覆盖^和$。任何解决方案都值得赞赏。 需要将execute\u orig中的第一、第二个元素替换为execute\u change中的第一、第二个元素,但前提是从头到尾匹配完整字符串 exact_orig = c("oz","32 oz") exact_change = c("20 oz","32 ct") gsub_FixedTrue <- func
gsub
精确的完整字符串-我知道我需要使用^
和$
。问题是我的字符串中有特殊字符(可能是[
或
),因此我需要使用fixed=T
。这会覆盖^
和$
。任何解决方案都值得赞赏。
需要将execute\u orig
中的第一、第二个元素替换为execute\u change
中的第一、第二个元素,但前提是从头到尾匹配完整字符串
exact_orig = c("oz","32 oz")
exact_change = c("20 oz","32 ct")
gsub_FixedTrue <- function(i) {
for(k in seq_along(exact_orig)) i = gsub(exact_orig[k],exact_change[k],i,fixed=TRUE)
return(i)
}
我读了一个有点类似的线程,但无法使其适用于完整字符串()如果您想精确匹配完整字符串,我认为您在这种情况下不想使用正则表达式。只使用
match()
函数怎么样
fixedTrue<-function(x) {
m <- match(x, exact_orig)
x[!is.na(m)] <- exact_change[m[!is.na(m)]]
x
}
fixedTrue(c("32 oz","oz oz"))
# [1] "32 ct" "oz oz"
fixedTrue如果要精确匹配完整字符串,我认为在这种情况下不需要使用正则表达式。只使用match()
函数怎么样
fixedTrue<-function(x) {
m <- match(x, exact_orig)
x[!is.na(m)] <- exact_change[m[!is.na(m)]]
x
}
fixedTrue(c("32 oz","oz oz"))
# [1] "32 ct" "oz oz"
fixed如果我对条件感到困惑,请给出更多的输入和输出示例,并在满足条件时给出一些示例,这似乎相当简单,不需要任何正则表达式,但我不确定您试图实现什么,比如Map(function(x,y)ifelse(x==y,y,x),exact\u orig,exact\u change)
“oz”只有在整个字符串为“oz”时才必须更改为“20 oz”。因此“oz oz”应保留为“oz oz oz”。您可以尝试详细说明您试图提取的模式吗?包括像[
或
这样的符号不需要使用固定=真
[
进入“cap”。但同样,仅当满足完整字符串时,而不是在ca中[测试
我对条件感到困惑,请给出更多的输入和输出示例,并在满足条件时给出一些示例,这似乎相当简单,不需要任何正则表达式,但我不确定您试图实现什么,比如映射(函数(x,y)ifelse(x==y,y,x),精确的起始,精确的更改)
“oz”只有在整个字符串为“oz”时才必须更改为“20 oz”。因此“oz oz”应保留为“oz oz oz”。您可以尝试详细说明您试图提取的模式吗?包括像[
或
这样的符号不需要使用固定=真
[
进入“cap”。但同样,仅当满足完整字符串时,而不是在ca中[测试
多么简单和优雅!谢谢!如果我只想在满足另一个条件的情况下进行替换怎么办?比方说,如果某个标志==1
但当标志!=1
标志将属于x
并且将来自同一数据框架中的另一列时,则将更改为32盎司
你只需要对涉及的向量做适当的索引。如果你不确定如何做,这似乎是一个新的/不同的问题。我建议你至少做第一次尝试,如果你不成功,开始一个新的问题,显示你尝试的代码,并描述它如何不起作用。你不应该在Stac的评论中提出新问题k Overflow.OK.尝试了几件事,但在新的测试用例中没有成功。将问一个不同的问题。ThanksHow简单而优雅!谢谢!如果我只想在满足另一个条件的情况下进行替换怎么办?比方说,将32 oz
更改为32 ct
如果某个标志==1
而不是标志!=1
时。flag
将属于x
并且将来自同一数据框架中的另一列,然后您只需要对涉及的向量进行适当的索引。如果您不确定如何做,这似乎是一个新的/不同的问题。我建议您至少进行第一次尝试,如果不成功,请开始一个新的问题您尝试的代码,并描述了它是如何工作的。不应该在堆栈溢出的注释中提出新问题。好的。尝试了几件事,但在新的测试用例中没有成功。将提出一个不同的问题。谢谢