R 匹配字符串正则表达式精确匹配-特殊字符
下面是一个已解决的线程:(感谢@onyanbu更新了代码) 我需要精确匹配字符串-即使有特殊字符 注-抱歉这是关于这个问题的第三个问题。我就快到了,但现在我不知道如何处理特殊字符,而且我在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("",
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