R:在循环中使用 gsub 删除文本

R: Removing Text using gsub in loop

我正在尝试解析和清理 R 中名为 df3 的数据框中名为 Tab 的列中的字符串。这是我在 R 中采用 gsub() 函数的解决方案。

df3$Tab <- gsub(".*from","",df3$Tab)
df3$Tab <- gsub(".*FROM","",df3$Tab)
df3$Tab <- gsub("where.*","",df3$Tab)
df3$Tab <- gsub("WHERE.*","",df3$Tab)

基本上我想删除“FROM”之前的所有内容以及“WHERE”之后的所有内容。 这个解决方案有效,但我想写下一个循环,但是当我这样做时:

df3$Tab <- for (i in seq_along(df3$Tab)){
  df3$Tab <- gsub(".*from","",df3$Tab)
  df3$Tab <- gsub(".*FROM","",df3$Tab)
  df3$Tab <- gsub("where.*","",df3$Tab)
  df3$Tab <- gsub("WHERE.*","",df3$Tab)
  break
}

我完全删除了 df3$Tab 列。有人可以解释我哪里错了吗?谢谢

想知道你为什么要使用循环。 one-liner 也应该有效:

df3$Tab <- gsub("(?i)(where.*|.*from)", "",df3$Tab)
  • (?i):使正则表达式成为 case-insensitive
  • 的标志
  • (where.*|.*from):一个交替组匹配 (i) 文字 where 后跟任何零次或多次和 (ii) 文字 from 前面任何零次或多次