RegEx替换自动SQL代码创建者

时间:2018-07-06 15:33:11

标签: r regex

我在R中构建了一个脚本,该脚本会自动创建一个非常长且复杂的SQL查询,以在5个数据库的相似表上创建视图。

当然有集成问题要解决。使这种情况发生的唯一剩下的就是我现在要向您介绍的问题。

考虑一个很长的字符串,例如

'"/*NOTES*/", "/*TABLE_ID*/", "/*TABLE_SUB_ID*/", "/*TABLE_SUB_SUB_ID*/", "OTHER_COLUMNS",'

我的目标是替换

  • 此字符串'"/*'与该字符串'/*'
  • 此字符串'*/",'与该字符串'*/'

我尝试过:

gsub('"/*', '/*', '"/*NOTES*/", "/*TABLE_ID*/", "/*TABLE_SUB_ID*/", "/*TABLE_SUB_SUB_ID*/", "OTHER_COLUMNS",')

但它返回字符串

'/**NOTES*//*, /**TABLE_ID*//*, /**TABLE_SUB_ID*//*, /**TABLE_SUB_SUB_ID*//*, /*OTHER_COLUMNS/*,'

我的预期输出是以下字符串:

'/*NOTES*/ /*TABLE_ID*/ /*TABLE_SUB_ID*/ /*TABLE_SUB_SUB_ID*/ "OTHER_COLUMNS",'

请注意,*不会转义,但是它表示将由SQL编译器运行字符串时注释的开始(/*)和结束(*/

1 个答案:

答案 0 :(得分:2)

转义正则表达式需要两个反斜杠,因此以下内容将为您提供所需的东西:

gsub('"?(/\\*|\\*/)"?', '\\1', '"/*NOTES*/", "/*TABLE_ID*/", "/*TABLE_SUB_ID*/", "/*TABLE_SUB_SUB_ID*/", "OTHER_COLUMNS",')
# [1] "/*NOTES*/, /*TABLE_ID*/, /*TABLE_SUB_ID*/, /*TABLE_SUB_SUB_ID*/, \"OTHER_COLUMNS\","

仅供参考,大多数情况下都需要双反斜杠,但以下是合法的单反斜杠特殊字符:

'\a\b\f\n\r\t\v'
# [1] "\a\b\f\n\r\t\v"
'\u0101' # unicode, numbers are variable
# [1] "a"
'\x0A'   # hex, hex-numbers are variable
# [1] "\n"

也许还有更多,尽管我确定它在某处,但我找不到权威列表。