如何在Postgresql中提取子字符串模式

the*_*ist 7 regex postgresql substring regexp-substr

我有一个包含大量不一致字符串的列.其中一些包含一个子串,其中包含'2015mmdd_AB_CD_EFG_(text)_(text)_HIJ'我想要提取的一致模式.我觉得这是regexp和子串命令的交叉情况.

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

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

这并没有按照需要结束输出,输出就像'(...)_ HIJ_blablabla'.

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

a_h*_*ame 13

假设2015mmdd实际上意味着某种"日期",以便真实数据包含例如20150713以下内容:

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

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

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

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