【问题标题】:Remove quotation marks whitespaces from string从字符串中删除引号空格
【发布时间】:2021-12-12 02:05:19
【问题描述】:

我想从字符串中删除引号空格,在我的情况下,将' FIGUEIRAS040C ' 更改为'FIGUEIRAS040C'

my.ex<- "SELECT * FROM CF_2021 WHERE ID_UNIQUE = ' FIGUEIRAS040C '"

输出必须是:

my.ex
[1] "SELECT * FROM CF_2021 WHERE ID_UNIQUE = 'FIGUEIRAS040C'"

我尝试str_pad() 函数和regex 表达式没有成功。请问有大神帮忙解决吗?

【问题讨论】:

  • 你知道这个字符串最初是如何创建的吗?在那里修复它可能比事后清理它更容易。
  • 同意 MrFlick 的观点,例如,如果 ID_UNIQUE 来自数据框,您只需在列上运行 trimws 即可修复此输出。
  • 不要这样形成查询,容易出现很多问题(比如这个)。通常使用绑定参数或glue::glue_sql 会更好;见db.rstudio.com/best-practices/run-queries-safely
  • 但是要修复这个症状,要么从paste更改为paste0,要么使用paste(..., sep="")(实际上相同)。但实际上,这样做有很多风险,不要这样做。
  • 真的,我强烈建议您阅读该链接并将参数化查询使用glue_sql()... -你,短时间的投资很值得。

标签: r regex string stringr


【解决方案1】:

1) 匹配引号、任意数量的空格 ( *)、任意字符的最短字符串 (.*?) 直到另一数量的空格 ( *) 和引号.将其替换为空格之间的部分并用引号括起来。如果可以有多个,请使用 gsub 而不是 sub。不使用任何包。

sub("' *(.*?) *'", "'\\1'", my.ex)
## [1] "SELECT * FROM CF_2021 WHERE ID_UNIQUE = 'FIGUEIRAS040C'"

2) 这种方法适用于 SQLite,如果它支持 trim 函数,则可以适用于您使用的任何 SQL 方言。

sub("('.*?')", "trim(\\1)", my.ex)
## [1] "SELECT * FROM CF_2021 WHERE ID_UNIQUE = trim(' FIGUEIRAS040C ')"

例如,

library(sqldf)

sql <- "select * from iris where Species = ' setosa ' limit 3"
sql2 <- sub("('.*?')", "trim(\\1)", sql)

sql2
## [1] "select * from iris where Species = trim(' setosa ') limit 3"

sqldf(sql2)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 2011-09-21
    • 2017-11-20
    相关资源
    最近更新 更多