删除文本文件中逗号之间的特定模式

时间:2018-07-24 12:04:50

标签: sql regex notepad++

我在notepad ++上逐行编写了数千个SQL查询。单行包含一个SQL查询。每个SQL查询都包含将从数据库中选择的列列表作为逗号分隔的值。现在我们希望某些列不成为其中的一部分遵循特定模式/正则表达式的列表。SQL查询遵循特定模式:

  1. 已将修剪后的列选作别名“ PK”
  2. 每个查询的末尾都有一个“ date” where条件。

有时候我们想要删除的模式既存在于PK / where中,也存在于PK / where中。我们不想从那些位置删除该列/模式,只需从列选择列表中删除。

下面是一个SQL查询的示例:

select (TRIM(TAE_TSP_REC_UPDATE)) as PK,TAE_AMT_FAIR_MV,TAE_TXT_ACCT_NUM,TAE_CDE_OWNER_TYPE,TAE_DTE_AQA_ABA,TAE_RID_OWNER,TAE_FID_OWNER,TAE_CID_OWNER,TAE_TSP_REC_UPDATE from TABLE_TAX_REP where DATE(TAE_TSP_REC_UPDATE)>='03/31/2018'

删除列/模式后,查询应如下所示:

 select (TRIM(TAE_TSP_REC_UPDATE)) as PK,TAE_AMT_FAIR_MV,TAE_TXT_ACCT_NUM,TAE_CDE_OWNER_TYPE,TAE_DTE_AQA_ABA from TABLE_TAX_REP where DATE(TAE_TSP_REC_UPDATE)>='03/31/2018'

想要从逗号之间的每个查询中删除以下模式:

  1. .FID。
  2. .RID。
  3. .CID。
  4. .TSP。

如果该模式存在于TRIM / DATE函数中,则不应对其进行触摸。应仅从列选择列表中将其删除。 关于上述内容,有人可以帮我吗。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用

(?:\G(?!^)|\sas\s(?=.*'\d{2}/\d{2}/\d{4}'$))(?:(?!\sfrom\s).)*?\K,?\s*[A-Z_]+_(?:[FRC]ID|TSP)_[A-Z_]+

详细信息

  • (?:\G(?!^)|\sas\s(?=.*'\d{2}/\d{2}/\d{4}'$))-两种选择:
    • \G(?!^)-上一个位置的末尾,而不是行首的位置
    • |-或
    • \sas\s(?=.*'\d{2}/\d{2}/\d{4}'$)-由单个空格包围的as,后跟除换行符之外的任何0+字符,然后是',2位数字,/,2数字/,4位数字和'位于行尾
  • (?:(?!\sfrom\s).)*?-消耗除换行符以外的任何char,0个或多个重复(尽可能少),这些字符不会开始空白,from,空白序列
  • \K-匹配重置运算符,舍弃到目前为止已匹配的所有文本
  • ,?\s*-可选逗号,后跟0+个空格
  • [A-Z_]+_(?:[FRC]ID|TSP)_[A-Z_]+-ASCII字母或/和_,出现1次或多次,后跟_,然后依次是FR或{{1} },后跟CID,然后是TSP,再出现1次或多次出现的ASCII字母或/和_

请参见regex demo

enter image description here