我有一个这样的字符串:

vect <- c("Thin lines are not great, I am in !!! AND You shouldn't be late OR you loose")

我想将“in”替换为 %in%,“AND”替换为“&”,“OR”替换为“|”。

我知道这可以使用 gsub 来完成,如下所示:
gsub("\\bin\\b","%in%", vect),

但是每个替换我都需要三行不同的行,因此我选择使用 gsubfn

所以我试过了,
gsubfn("\\bin\\b|\\bAND\\b|\\bOR\\b", list("in"="%in%", "AND"= "&", "OR"="|"), vect)

但它返回一个没有任何改变的字符串,由于某种原因 \\b 不适用于该字符串。但是,\\bgsub一起使用时效果很好,我可以通过使用gsub将所有三个字符串替换在一起来替换其中的所有字符串。

我的问题是,为什么 \\bgsubfn 中不起作用。我的正则表达式中缺少什么?

请帮忙。

输出 应该是:
"Thin lines are not great, I am %in% !!! & You shouldn't be late | you loose"

这有效:
gsubfn("\\w+", list("in"="%in%", "AND"= "&", "OR"="|"), vect)

最佳答案

默认情况下,使用 Tcl 正则表达式引擎,参见 gsubfn docs :



因此,单词边界由 \y 定义:

> gsubfn("\\y(in|AND|OR)\\y", list("in"="%in%", "AND"= "&", "OR"="|"), vect)
[1] "Thin lines are not great, I am %in% !!! & You shouldn't be late | you loose"

另一种方法是使用 \m 作为前导词边界,使用 \M 作为尾随词边界:
> gsubfn("\\m(in|AND|OR)\\M", list("in"="%in%", "AND"= "&", "OR"="|"), vect)
[1] "Thin lines are not great, I am %in% !!! & You shouldn't be late | you loose"

您可以传递 perl=TRUE 并使用 \b :
> gsubfn("\\b(in|AND|OR)\\b", list("in"="%in%", "AND"= "&", "OR"="|"), vect, perl=TRUE)
[1] "Thin lines are not great, I am %in% !!! & You shouldn't be late | you loose"

关于r - 为什么 R 中的 gsubfn 中的\\b 不适合我?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47846159/

10-12 20:42