R 匹配字符串正则表达式精确匹配-特殊字符

R 匹配字符串正则表达式精确匹配-特殊字符,r,regex,string,stringr,stringi,R,Regex,String,Stringr,Stringi,下面是一个已解决的线程:(感谢@onyanbu更新了代码) 我需要精确匹配字符串-即使有特殊字符 注-抱歉这是关于这个问题的第三个问题。我就快到了,但现在我不知道如何处理特殊字符,而且我在r中操作字符串的技能仍然很高 为清晰起见,更新了: 我有一个匹配词/字符串表,如下所示: codes <- structure( list( column1 = structure( c(2L, 3L, NA), .Label = c("",

下面是一个已解决的线程:(感谢@onyanbu更新了代码)

我需要精确匹配字符串-即使有特殊字符

注-抱歉这是关于这个问题的第三个问题。我就快到了,但现在我不知道如何处理特殊字符,而且我在r中操作字符串的技能仍然很高

为清晰起见,更新了:

我有一个匹配词/字符串表,如下所示:

codes <- structure(
  list(
    column1 = structure(
      c(2L, 3L, NA),
      .Label = c("",
                 "4+", "4 +"),
      class = "factor"
    ),
    column2 = structure(
      c(1L,
        3L, 2L),
      .Label = c("old", "the money", "work"),
      class = "factor"
    ),
    column3 = structure(
      c(3L, 2L, NA),
      .Label = c("", "wonderyears",
                 "woke"),
      class = "factor"
    )
  ),
  row.names = c(NA,-3L),
  class = "data.frame"
)
问题-第3行ID\u 3 我只想在字符串包含“4+”或“4+”时标记它,但它仍被标记。
有没有办法准确地捕捉它?

我们可以避开
+
来逐字计算它

+(grepl(paste0( "(", gsub("\\+", "\\\\+", na.omit(codes$column1)), ")",
     collapse="|"), strings$Open_comments))
#[1] 0 0 0 0
如果我们使用带有
4+
的字符串,它将拾取

+(grepl(paste0( "(", gsub("\\+", "\\\\+", na.omit(codes$column1)), ")",
     collapse="|"), "Flag only if there is a 4+ with a plus"))
#[1] 1

对于多列

sapply(codes, function(x)+(grepl(paste0( "\\b(", 
      gsub("\\+", "\\\\+", na.omit(x)), ")\\b",
      collapse="|"), strings$Open_comments)))
#     column1 column2 column3
#[1,]       0       0       0
#[2,]       0       1       0
#[3,]       0       0       0
#[4,]       0       0       0

预期输出是什么
4+
4+
在第1列。这是一个打字错误吗?
我需要拿起4个苹果,尽管它没有+。
。输出中的列1显示了该值的1。Hi@akrun。4的列中不应该有1,仅当它是4+或4+时,而不是4本身。这有意义吗?那么,输出应该是
100
对吗?谢谢@akrun,正在进行这个小测试,但由于某种原因在实际数据集中失败了。@Keelin可能是因为模式是different@Keelin能否显示一个失败的字符串示例。谢谢这是一个奇怪的问题-我认为这是一个与a*有关的问题。我们将尝试从完整的数据集中删除它们,看看这是否有效。非常感谢@akrun,它现在运行得非常好。再次感谢你的帮助。
+(grepl(paste0( "(", gsub("\\+", "\\\\+", na.omit(codes$column1)), ")",
     collapse="|"), strings$Open_comments))
#[1] 0 0 0 0
+(grepl(paste0( "(", gsub("\\+", "\\\\+", na.omit(codes$column1)), ")",
     collapse="|"), "Flag only if there is a 4+ with a plus"))
#[1] 1
sapply(codes, function(x)+(grepl(paste0( "\\b(", 
      gsub("\\+", "\\\\+", na.omit(x)), ")\\b",
      collapse="|"), strings$Open_comments)))
#     column1 column2 column3
#[1,]       0       0       0
#[2,]       0       1       0
#[3,]       0       0       0
#[4,]       0       0       0