gpt4 book ai didi

regex - Postgres 正则表达式 regexp_split_to_array

转载 作者:行者123 更新时间:2023-11-29 14:24:05 27 4
gpt4 key购买 nike

在 postgresql 中,我需要从给定列的字段中提取 3 个特定的字母数字字符,然后从中创建年份。所以如果该字段的值为FUT,GRA,S12,1055559S11,1050830,PON,我需要S11 S12 然后创建20112012。结果可以保留为文本字段。

我已使用以下方法获取 S??:substring(my_field from E'(S\\d\\d),')但创造年份似乎更具挑战性。我希望使用 regexp_split_to_array 但它似乎工作得不是很好。

最佳答案

您看起来快到了——您只需将“20”附加到提取的“12”/“11”:

已更新(PostgreSQL 没有边界\b(?!)):

SELECT '20'||substring(my_field from E'(?:^|\\W)S(\\d\\d)(?!\\w)') ....

-- NOTE: Old version. However there's no '\b' in this regex flavour.
SELECT '20'||substring(my_field from E'\\bS(\\d\\d)\\b') ....

您必须对反斜杠进行两次转义。此外,在正则表达式中使用方括号意味着所选子字符串将为“12”或“11”,不包括“S”。 '20'||xxxx 只是连接两个字符串。

(?:^|\\W) 确保 Sxx 位于字符串的开头,或者前面有一个非单词字符(如空格或逗号)。这会阻止 FUT,GRAS13,S12 中的 S13 匹配。

(?!\\w) 确保 Sxx 后面没有跟另一个单词字符(即不是更大单词的一部分)。这可以防止 S13S132,GRA,S12 中匹配。

(注意 - 我以前有 \b 意思是“单词边界”,但 PostgreSQL 正则表达式不支持它,所以 (?:^|\W)(?!\w) 是模拟它的方法。

关于regex - Postgres 正则表达式 regexp_split_to_array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8999230/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com