我有这个字符串
a="""SELECT
transform_abc.ds AS "ds",
SUM(transform_abc.dollars) AS "dollars",
transform_abc.unit AS "unit"
FROM fct_table_abc transform_abc
WHERE
(
transform_abc.is_charged > 0
OR transform_abc.account_status = 0
)
AND transform_abc.ds = '2020-02-20'
GROUP BY
transform_abc.ds,
transform_abc.unit"""
我需要在SELECT和GROUP BY之后从此字符串中删除带有ds的列,但在WHERE之后则不需要。
需要的输出:
a="""SELECT
SUM(transform_abc.dollars) AS "dollars",
transform_abc.unit AS "unit"
FROM fct_table_abc transform_abc
WHERE
(
transform_abc.is_charged > 0
OR transform_abc.account_status = 0
)
AND transform_abc.ds = '2020-02-20'
GROUP BY
transform_abc.unit"""
Tranform_abc只是一个表名,它可以是任何表名。所以我们不能在正则表达式中使用它。不确定如何解决此问题
请在解决方案下方找到。从语法上讲,这可能是错误的,尚未编译但应在逻辑上起作用。
#!/usr/bin/python
import re
a="""SELECT
transform_abc.ds AS "ds",
SUM(transform_abc.dollars) AS "dollars",
transform_abc.unit AS "unit"
FROM fct_table_abc transform_abc
WHERE
(
transform_abc.is_charged > 0
OR transform_abc.account_status = 0
)
AND transform_abc.ds = '2020-02-20'
GROUP BY
transform_abc.ds,
transform_abc.unit"""
a = re.sub("SELECT[\s]+([a-zA-Z0-9.])+_([a-zA-Z0-9.])+.ds", "SELECT ", a)
a = re.sub("SELECT[\s]+[a-zA-Z]+[\s]+(\")ds(\",)","SELECT ",a)
a = res.sub("GROUP BY[\s]+([a-zA-Z0-9.])+_([a-zA-Z0-9.])+.ds,","GROUP BY ",a)