R:从.txt读取引号,不带反斜杠

时间:2015-03-29 05:39:02

标签: regex r escaping quotes backslash

我将字符串(?<=k)(",V,")(?=p)保存在.txt file的表格中 - 为了简单起见,我们说它位于第1行第1列。我使用file进行了阅读read.table quote="" paste0(file[1,1])。我想使用"(?<=k)(",V,")(?=p)"返回字符串"(?<=k)(\",V,\")(?=p)"。但是,R继续给我file,在最初来自"(?<=k)(",V,")(?=p)"的两个引号之前加上反斜杠。我怎样才能从.txt 字面中读取引号?谢谢!

更新:

我在file中将字符串更改为cat(),而不是2个原始引号。阅读之后,我遵循了MichaelVE的建议并使用了cat(paste0(file[1,1]))

"(?<=k)(",V,")(?=p)"

这确实给了我想要的序列:

gsub

但我不能在{{1}}之类的另一个函数中使用输出,因为它不是字符串 - 实际上我不知道它是什么。有关如何将其转换为可用的东西的任何想法吗?

3 个答案:

答案 0 :(得分:2)

这只是R to&#34; read&#34;字符串中的引号。

我相信使用cat(x)可以解决x是你的字符串的问题。这会将您的字符串格式化为&#39;最终用户&#39;格式。

答案 1 :(得分:2)

\"是&#34;不可打印的&#34;之一?Quotes中描述的字符。

  

...反斜杠用于转义字符常量

中的后续字符      

反斜杠用于在字符常量内启动转义序列。

     

单引号需要通过单引号字符串中的反斜杠进行转义,并使用双引号字符串中的双引号进行转义

当在字符常量内时,某些字符需要以转义序列开头。

例如,尝试使用嵌入式双引号分配它,然后出现错误

x <- "(?<=k)(",V,")(?=p)"
# Error: unexpected ',' in "x <- "(?<=k)(","

因此,我们可以用单引号引用它,或者转义嵌入的引号。

x <- '(?<=k)(",V,")(?=p)'
x
# [1] "(?<=k)(\",V,\")(?=p)"

现在用于&#34;可用&#34;和可分配的输出,最好使用print(),因为cat()返回NULL。但要注意逃脱仍在那里,你无法摆脱它们。

p <- print(x, quote=FALSE)
# [1] (?<=k)(",V,")(?=p)
p
# [1] "(?<=k)(\",V,\")(?=p)"

答案 2 :(得分:0)

check?read.table for&#39; quote&#39;论点。

报价
引号字符集。要完全禁用引用,请使用quote =&#34;&#34;。请参阅扫描引号中嵌入引号的行为。仅对作为字符读取的列进行引用,除非指定了colClasses,否则它们都是字符。

编辑:

df <- read.table("myfile.txt", 
                 header = TRUE,
                 sep = "\t", 
                 stringsAsFactors = FALSE,
                 quote = "")
df[1,1]
[1] "(?<=k)(\",V,\")(?=p)"  

df <- read.table("myfile.txt", 
                 header = TRUE,
                 sep = "\t", 
                 stringsAsFactors = FALSE,
                 quote = "\"")

df[1,1]
[1] "(?<=k)(,V,)(?=p)"

EDIT2

df <- read.table("myfile.txt", 
                 header = TRUE,
                 sep = "\t", 
                 stringsAsFactors = FALSE,
                 quote = "\"")

dput(df)
structure(list(Filename = c("(?<=k)(,V,)(?=p)", "(?<=k)(,V,)(?=p)", 
"(?<=k)(,V,)(?=p)", "(?<=k)(,V,)(?=p)", "(?<=k)(,V,)(?=p)", "(?<=k)(,V,)(?=p)"
)), .Names = "Filename", class = "data.frame", row.names = c(NA, 
-6L))

str(df)
'data.frame':   6 obs. of  1 variable:
 $ Filename: chr  "(?<=k)(,V,)(?=p)" "(?<=k)(,V,)(?=p)" "(?<=k)(,V,)(?=p)" "(?<=k)(,V,)(?=p)" ...

df[1,1]
[1] "(?<=k)(,V,)(?=p)"

str(df[1,1])
 chr "(?<=k)(,V,)(?=p)"

gsub("[(\")]", '', df[1,1])

[1] "?<=k,V,?=p"