Postgresql postgres子字符串使用正则表达式拆分文本
我有下面的字符串模式,我想把文本分成4个字段Postgresql postgres子字符串使用正则表达式拆分文本,postgresql,substring,Postgresql,Substring,我有下面的字符串模式,我想把文本分成4个字段 NIFTY,11100年6月21日CE-->NIFTY,11100年6月21日CE 在上面的字符串中,只有两种字符串格式是常量。例如:21JUN表示年份和月份,它是5个字符的常量表示。在此之前表示名称,该名称可以是任意数量的字符。我认为正则表达式将类似于([1-2][0-9])(一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月) 最后两个字符是常量,其值可以是PE | CE。介于21JUN和CE | PE之间的值表示履约价格
NIFTY,11100年6月21日CE
-->NIFTY,11100年6月21日CE
在上面的字符串中,只有两种字符串格式是常量。例如:21JUN表示年份和月份,它是5个字符的常量表示。在此之前表示名称,该名称可以是任意数量的字符。我认为正则表达式将类似于([1-2][0-9])(一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月)
最后两个字符是常量,其值可以是PE | CE
。介于21JUN和CE | PE
之间的值表示履约价格,它始终是数字,但可以是任意位数
现在我想把它们分成4个字段,并努力获得正则表达式。是否有人熟悉此要求的Postgres命令?您可以使用
选择regexp_匹配('NIFTY21JUN11100CE','^(\D+)(\D{2}[A-Z]{3})(\D+(PE|CE)$)代码>
逐步:
^ Beginning of the string
( start capture
\D+ more than zero non-digit chars
) end capture
( start capture
\d{2} exactly 2 digits
[A-Z]{3} exactly 3 chars in the range from A to Z
) end capture
( start capture
\d+ more than zero digit chars
) end capture
( start capture
PE|CE one of 'PE' or 'CE'
) end capture
$ end of the string
使用字符类[1-2][0-9]
和交替(一月|二月|…)
的问题中的年-月正则表达式稍微严格一点,也可以使用。`SELECT regexp_match('NIFTY21JUN11100CE','^(\D+)(\D{2})(\w{3})(\D+)(\D+)(PE{CE)$)`@钳形我认为你的RE有点咄咄逼人,因为它返回5个字段而不是4个字段。节“(\d{2})(\w{3})”应该是(\d{2}\w{3})。非常感谢您的帮助和保护。是的,我能够将其放入数组的4个字段中,并在查询中进一步使用它们。干杯。@Belayer你当然是对的。