如何使用python从字符串中删除.ds模式字符串

问题描述 投票:0回答:1

我有这个字符串

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只是一个表名,它可以是任何表名。所以我们不能在正则表达式中使用它。不确定如何解决此问题

python regex regex-lookarounds regexp-replace
1个回答
0
投票

请在解决方案下方找到。从语法上讲,这可能是错误的,尚未编译但应在逻辑上起作用。

#!/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)

a将包含最终的预期结果

感谢KM

© www.soinside.com 2019 - 2024. All rights reserved.