【问题标题】:How to extract a substring pattern in Postgresql如何在 Postgresql 中提取子字符串模式
【发布时间】:2015-10-01 14:06:35
【问题描述】:

我有一列包含很多不一致的字符串。其中一些包含一个具有'2015mmdd_AB_CD_EFG_(text)_(text)_HIJ' 一致模式的子字符串,我想提取它。我觉得这是正则表达式和子字符串命令的交叉案例。

到目前为止,我最好的方法是相当丑陋的

substring(col_name, '........_.._.._..._.+_.+_...')

它不会根据需要结束输出,而是输出类似于'(...)_HIJ_blablabla'。

在这种情况下如何有效地结合模式识别和子串选择?

【问题讨论】:

    标签: regex postgresql substring regexp-substr


    【解决方案1】:

    假设2015mmdd 实际上意味着某种“日期”,因此真实数据包含例如20150713 下面就可以了:

    substring(col_name, '[0-9]{8}_[A-Z]{2}_[A-Z]{2}_[A-Z]{3}_\([a-z]+\)_\([a-z]+\)')
    

    这将返回以 8 个数字开头的子字符串,后跟一个下划线,后跟两个大写字符,后跟一个下划线,后跟两个大写字符,后跟一个下划线,后跟三个大写字符,后跟一个下划线,后跟一个左括号后跟至少一个小写字母、右括号、下划线、左括号、至少一个小写字符和右括号。

    如果2015mmdd 确实意味着2015 后跟字符串mmdd,那么你需要这个:

    substring(col_name, '[0-9]{4}mmdd_[A-Z]{2}_[A-Z]{2}_[A-Z]{3}_\([a-z]+\)_\([a-z]+\)')
    

    【讨论】:

    • 这正是我正在寻找的,第一行实际上就是我正在使用的情况。然而,当我查询数据时它不会返回任何输出。非常感谢您的帮助,我会努力解决问题。
    • 非常感谢 a_horse_with_no_name,您的代码并不能完全为我做这件事,因为简单的 "[a-z]+" 可以正常工作。在我的机器上使用 PgAdmin。但无论如何它解决了我的问题。 :)
    猜你喜欢
    • 2013-06-17
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2021-08-01
    相关资源
    最近更新 更多