如何将文本提取到列中第4个字符实例?
我从名为filter_type
的列中选择文本,直到第四个>
字符。
要做到这一点,我一直试图找到第四个>
字符的位置,但它不起作用:
select substring(filter_type from 1 for position('>' in filter_type))
答案 0 :(得分:1)
您可以在Postgres中使用pattern matching功能。
首先找出一个模式来捕获第四个>
字符的所有内容。
要启动您的模式,您应该创建一个子组,用于捕获非>
个字符和一个>
字符:
([^>]*>)
然后捕获四次以进入>
的第四个实例
([^>]*>){4}
然后,您需要将其包装在一个组中,以便匹配带回所有四个实例:
(([^>]*>){4})
并设置一个字符串符号的开头,以确保它只匹配字符串的开头(不在中间):
^(([^>]*>){4})
Here's a working regex101 example of that!
一旦你拥有了将在第一个组元素中返回你想要的模式(你可以在右侧面板的在线正则表达中告诉你),你需要在SQL中选择它。
在Postgres中,substring function可以选择使用正则表达式模式,使用子字符串中的“from”语句从输入中提取文本。
要完成,请将它们放在一起!
select substring(filter_type from '^(([^>]*>){4})')
from filter_table
如果要在>
的实例少于四个时匹配整个字符串,请使用此正则表达式:
^(([^>]*>){4}|.*)
答案 1 :(得分:0)
substring(filter_type from '^(([^>]*>){4})')
这种子字符串形式允许您提取与正则表达式模式匹配的字符串部分。
答案 2 :(得分:0)
您还可以使用简单的非正则表达式解决方案:
SELECT array_to_string((string_to_array(filter_type, '>'))[1:4], '>')
以上查询: