首页 > 解决方案 > 在 R 中查找和替换通配符

问题描述

我需要查找数据集中的值何时出现 3 .x(例如A1.1.1.1)并将其替换为另一个名称(例如 B1)。我目前有这个,它适用于A1.1.1.1但我需要它能够A1.x.x.x在 x 是任何数字(小于 10)的情况下工作。有没有办法调整它以使其有效?

node_data$test<-str_replace(node_data$test, "A1.1.1.1", "B1")

标签: rreplacefindwildcardstr-replace

解决方案


像这样?

ex_str <- c("A1.1.1.1", "D.1.1", "C.1.1.1", "J.2.1.3", "J.2.33.3")

str_replace(ex_str, "\\..\\..\\..", "B1")

[1] "A1B1"     "D.1.1"    "CB1"      "JB1"      "J.2.33.3"

请注意,在此示例中,每个点之后的字符不必相同,因此示例向量的第四个条目被替换。但是,被匹配的 '.xxx' 只能在每个 '.' 之后有一个字符。所以第五个条目不会被替换。

或者,以下正则表达式将每个字符串的匹配段替换为.B1.B1.B1

str_replace(ex_str, "\\..\\..\\..", ".B1.B1.B1")

[1] "A1.B1.B1.B1" "D.1.1"       "C.B1.B1.B1"  "J.B1.B1.B1"  "J.2.33.3"

推荐阅读