Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex R:gsub,精确完整字符串,固定=T_Regex_R_Gsub - Fatal编程技术网

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
并且将来自同一数据框架中的另一列,然后您只需要对涉及的向量进行适当的索引。如果您不确定如何做,这似乎是一个新的/不同的问题。我建议您至少进行第一次尝试,如果不成功,请开始一个新的问题您尝试的代码,并描述了它是如何工作的。不应该在堆栈溢出的注释中提出新问题。好的。尝试了几件事,但在新的测试用例中没有成功。将提出一个不同的问题。谢谢