R 字符串的多个替换

R 字符串的多个替换,r,loops,gsub,R,Loops,Gsub,我是R的新手,在R工作室工作,我很享受。 我基本上是尝试分割一条SQL语句,用完整的表名替换所有别名。我已经在这个论坛上得到了以下代码的大量帮助 下面的代码接受和SQL语句,并将其拆分为基本组件,以便 挑选 从…起 在哪里 我以SQL为例,但该语句可以有任意数量的表和更多的别名。其目的是编写一个循环,该循环将用完整的表名替换别名,而不考虑SQL和别名的数量。当前,我的gsub函数将仅替换查询中的第二个别名。我想知道是否有人能看出我逻辑上的错误 txt <- "SELECT AL1.attr

我是R的新手,在R工作室工作,我很享受。 我基本上是尝试分割一条SQL语句,用完整的表名替换所有别名。我已经在这个论坛上得到了以下代码的大量帮助

下面的代码接受和SQL语句,并将其拆分为基本组件,以便 挑选 从…起 在哪里

我以SQL为例,但该语句可以有任意数量的表和更多的别名。其目的是编写一个循环,该循环将用完整的表名替换别名,而不考虑SQL和别名的数量。当前,我的gsub函数将仅替换查询中的第二个别名。我想知道是否有人能看出我逻辑上的错误

txt <- "SELECT AL1.attr1,AL2.attr2 FROM Table_1 as AL1, Table_2 as AL2 WHERE AL1.attr1 == 1"

###########################################################################################
# First Split the SQL statement into SELECT FROM and WHERE clause (1 Row FOr each)
# Take The From Clause and Split that on Period so AL1.Attrib1 = AL1  Attrib1
# Then split on 'as' so splitting the alias from the actual table name
###########################################################################################

这可能只是一个问题,您如何[不]通过for循环存储每次迭代的结果。如果重复更新同一个字符串(下面称为
test
),最终得到一个完全更新的字符串,会怎么样

test <- SQLSegmented[1]
for (i in 1:ncol(SplitOnComma)) 
{
  cat(SplitOnComma[1,i])
  cat(SplitOnComma[2,i])
  test = gsub(SplitOnComma[2,i], SplitOnComma[1,i], test)
}
test
测试
库(stringr)

所以,你想把所有的
表1作为AL1
,无论
AL1.x
在哪里,都用
Table\u 1
.x`(但以通用方式)替换它?这两个答案都很好,但我选择了这个,因为我将使用它。@hrbrmstr的另一个答案可能更完整,但我必须深入研究regex才能完全理解它(下周的任务),谢谢你们两位的帮助,它真的非常有用
test <- SQLSegmented[1]
for (i in 1:ncol(SplitOnComma)) 
{
  cat(SplitOnComma[1,i])
  cat(SplitOnComma[2,i])
  test = gsub(SplitOnComma[2,i], SplitOnComma[1,i], test)
}
test
library(stringr)

txt <- "SELECT AL1.attr1,AL2.attr2 FROM Table_1 as AL1, Table_2 as AL2 WHERE AL1.attr1 == 1"

matches <- str_match_all(txt, "([A-Za-z0-9_]+)\ +as\ +([A-Za-z0-9_]+)")

for (i in 1:nrow(matches[[1]])) {

  txt <- gsub(sprintf("%s.", matches[[1]][i,3]), 
              sprintf("%s.", matches[[1]][i,2]),
              txt,
              fixed=TRUE)

}

txt <- gsub("\ +as\ +[A-Za-z_0-9]+", "", txt)
txt
## [1] "SELECT Table_1.attr1,Table_2.attr2 FROM Table_1, Table_2 WHERE Table_1.attr1 == 1"