从字符串中删除反斜杠

Posted

技术标签:

【中文标题】从字符串中删除反斜杠【英文标题】:Remove backslashes from character string 【发布时间】:2015-03-28 01:49:54 【问题描述】:

我正在从 txt 文件中读取文本并将内容传递给 SQL。 SQL 文本包含双引号并导致问题。我想删除下面字符串中的“\”,以便将其发送到 SQL

  test<- "select case when \"est\"  dsaf"
  test<-  cat(test, sep="")
  class(test)

返回一个 UNQUOTED 空对象

> test<- "select case when \"est\"  dsaf"
>   test<-  cat(test, sep="")
select case when "est"  dsaf
>   class(test)
[1] "NULL"

当我将不带引号的字符串传递给 SQL 时,我收到此错误:

Error in odbcQuery(channel, query, rows_at_time) : 
  'getCharCE' must be called on a CHARSXP

我希望它返回前导引号和尾随引号,然后我可以将它发送到 SQl,它会起作用。

[1] "select case when "est"  dsaf"

【问题讨论】:

信不信由你"select case when \"est\" dsaf" 中没有反斜杠字符。请阅读?Quotes @Richard - 我无法将它们更改为需要双引号的单引号。知道如何消除“\” cat 仅提供副作用并返回一个 NULL 对象。 在 r 中做不到的 sql 中需要做什么? 提供错误之前的完整代码。 (如果您使用来自cat 的结果,则test 为NULL。) 【参考方案1】:

也许您希望看到同一字符串的不同表示:

test2 <- 'select case when "est"  dsaf'
test<- "select case when \"est\"  dsaf"
identical(test, test2)
#[1] TRUE

当使用双引号构建字符值时,\" 的任何内部实例都只会变成双引号。它们将由 print(以及您在交互式会话中看到的 REPL)和转义反斜杠显示,但使用 cat 您无法确定它们不是真正的反斜杠。

进一步证明:

>  nchar("\"")
[1] 1

您可以使用cat 或使用quote=FALSE 打印,以显示内部确实存在的值:

> print(test, quote=FALSE)
[1] select case when "est"  dsaf

这证明,当\" 出现在字符串内部时,至少有一个版本的“SQL”同意(或“接受”)没有反斜杠:

> require(sqldf)
Loading required package: sqldf
Loading required package: gsubfn
Loading required package: proto
Loading required package: RSQLite
Loading required package: DBI
> ?sqldf
> a1r <- head(warpbreaks)
> a1s <- sqldf("select * from warpbreaks limit 6")
Loading required package: tcltk
> a2s <- sqldf("select * from CO2 where Plant like 'Qn%'")
> 
> a2sdq <- sqldf("select * from CO2 where Plant like \"Qn%\"")
> identical(a2s,a2sdq)
[1] TRUE

所以这是第一个问题。第二个问题是尝试分配cat 调用的值。 cat 函数在将其值发送到目的地(可能是控制台输出)后总是返回 NULL。您不能将生成的字符值保存为 R 名称。你总是得到NULL。请参阅?cat 帮助页面。

【讨论】:

你有答案吗? 我给了你答案。没有要删除的反斜杠。 我将这个字符串传递给 SQL,它确实看到了我需要删除它的“\”。 您在重复编程行为的拟人化特征。请提供请求的代码和错误信息。 对。这就是 cat 记录返回的内容。您仍然没有提供任何证据表明正在与之通信的任何“SQL”实例都会产生与测试对象中存在反斜杠相关的错误。【参考方案2】:

R - gsub replacing backslashes 中的解决方案对我有用。

例子:

library(stringr)
df$variable <- str_replace(df$variable,"\\\\","")

df$variable before: "xyz\"
df$variable after:"xyz"

【讨论】:

以上是关于从字符串中删除反斜杠的主要内容,如果未能解决你的问题,请参考以下文章

从字符串中删除所有反斜杠 - php - 正则表达式 [关闭]

从 Laravel 中的 JSON 字符串中删除添加的反斜杠

从 c# json 响应中删除双反斜杠

我正在尝试从字符串中删除反斜杠,但如果我用 print 打印出来,我会得到正确的字符串,但如果我用“po”打印它,我会得到相同的字符串

删除C#变体中的单个反斜杠

c ++如何从具有反斜杠的字符串中提取数字?