正则表达式 – 正则表达式中R中是否有原始字符串?


Python中,您可以使用原始字符串:

import re
re.sub(r"\\", ":", "back\\slash")  # r"\\" instead of "\\\\"

R中是否也存在这种情况?例如,这里是R中没有原始字符串的等效代码片段:

library(stringr)
str_replace("back\\slash", "\\\\", ":")

我希望能够做到这一点:

str_replace("back\\slash", raw("\\"), ":")

这个功能是否已经存在,或者我应该只实现自己的函数raw()?

最佳答案 不完全按照您想要的方式(即不是原始字符串的语言范围规范),并且没有明确记录,但您可以实现我所解释的更广泛的目标(进行字符串替换而不与笨拙的目标模式规范作斗争) stringr通过设置搜索模式的类来起作用.

s <- "\\"
class(s) <- "fixed"
str_replace("back\\slash", s, ":")

不幸的是,setClass()意味着“动态设置对象的类属性”以外的其他东西,所以你可能想要定义

str_replace_fixed <- function(string, pattern, replacement) {
    class(pattern) <- "fixed"
    return(str_replace(string,pattern,replacement))
}

stringr中已经有一个str_split_fixed();您可以请求将str_replace_fixed添加到包中…(如果我发布了issue on the stringr Github repo,我可能会首先要求明确记录此功能,其次要实现str_split_fixed …)

正如评论中指出的那样,大多数base-R字符串操作函数(sub,gsub,grep,grepl)已经有了固定的参数……

点赞