This question already has an answer here:
How to use back reference with stringi package?

(1个答案)


4年前关闭。




大多数stringr函数只是对应的stringi函数的包装。 str_replace_all是其中之一。但是我的代码无法与stri_replace_all(对应的stringi函数)一起使用。

我正在写一个快速的正则表达式,将驼峰式大小写转换为间隔的单词。

我很困惑为什么这可行:
str <- "thisIsCamelCase aintIt"
stringr::str_replace_all(str,
                         pattern="(?<=[a-z])([A-Z])",
                         replacement=" \\1")
# "this Is Camel Case ain't It"

而且,这不是:
stri_replace_all(str,
                 regex="(?<=[a-z])([A-Z])",
                 replacement=" \\1")
# "this 1s 1amel 1ase ain't 1t"

最佳答案

如果查看stringr::str_replace_all的源代码,您会看到它调用fix_replacement(replacement)\\#捕获组引用转换为$#。但是对stringi:: stri_replace_all的帮助也清楚地表明,您对捕获组使用了$1$2等。

str <- "thisIsCamelCase aintIt"
stri_replace_all(str, regex="(?<=[a-z])([A-Z])", replacement=" $1")
## [1] "this Is Camel Case aint It"

关于r - 在str_replace/stri_replace中使用捕获的组-stringi vs stringr ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39036688/

10-10 06:26