在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()
?
答案 0 :(得分:19)
自R 4.0.0起可用。
还可以使用类似于以下语法的原始字符常量 C ++中使用的一个:
r"(...)"
与...
任意字符 序列,但它不得包含结束序列)"
。分隔符对[]
和{}
[c] an也是 用过的。为了提高灵活性,可以放置多个破折号 开头引用和开头分隔符之间的值,只要相同 在分隔符和引号之间出现短划线。
来自?Quotes
中的示例:
r"{(\1\2)}"
## [1] "(\\1\\2)"
(请注意,双反斜杠是R的反斜杠印刷表示:cat()
在该对象上将打印(\1\2)
)
答案 1 :(得分:2)
不完全按照您想要的方式(即不是原始字符串的语言范围规范),并且没有明确记录,但您可以实现我的解释为更广泛的目标(进行字符串替换)通过设置搜索模式的类,在name = input(': ')
password = input(': ')
age = input(': ')
hello = [name, password, age]
with open('db.csv', 'a') as testfile:
csv.writer(testfile).writerow(hello)
函数中不与笨拙的目标模式规范作斗争。
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))
}
已经有str_split_fixed()
个;您可以请求将stringr
添加到包中...(如果我发布了issue on the stringr Github repo我可能会首先要求明确记录此功能,然后再实施str_replace_fixed
。 ..)
正如评论中所指出的,大多数base-R字符串操作函数(str_split_fixed
,sub
,gsub
,grep
)已经有{{ 1}}参数......
答案 2 :(得分:1)
对于您的示例,R <4.0.0替代方法是使用自动转义特殊字符的函数的另一种方法。这里的stringi
包很有帮助。
library(stringr)
library(stringi)
str_replace("back\\slash", stri_escape_unicode("\\"), ":")
由于这非常冗长,因此定义r <- stri_escape_unicode
会接近您所需的功能(r("\\")
)。
stringi
软件包还具有反向转义stri_unescape_unicode
的功能,该功能在闪亮的应用程序中非常有用,在该应用程序中,用户输入会自动转义。