我需要从具有以下格式的结构化文本片段中检索信息:
(AAB) Some name1 here 1234 (BB) More 12-text 99 (XY*) Hello world 12
我想要了解的内容如下:{AAB1234, BB99, XY*12}
策略:
XY*
)] 1234
(] 我没有走得太远,因为我的正则表达能力非常有限。
SELECT regexp_matches('(AAB) Some name1 1234 (BB) More text 99 (XY*) Hello world 12',
'\((.*?)\).*?(\d+)', 'g');
给予
{AAB,1}
{BB,9}
{XY*,1}
有什么想法吗?
加载项问题:
我在表information
的{{1}}列中有上述文字信息,我想将结果写入列my_table
。如何将上述解决方案集成到results
语句中?
即。
UPDATE
答案 0 :(得分:2)
您可以尝试:
SELECT array_agg(v) FROM (
SELECT array_to_string(
regexp_matches(
'(AAB) Some name1 1234 (BB) More text 99 (XY*) Hello world 12',
'\((.*?)\).*?(\d+)(?=$| \()', 'g'
),
''
) as v
) s;
请注意,正常情况下,如果您没有非常正式的语法定义,则regexp可能会非常脆弱。
要更新,这应该可以解决问题:
UPDATE my_table SET results = ARRAY(
SELECT array_to_string(
regexp_matches(
information,
'\((.*?)\).*?(\d+)(?=$| \()', 'g'
),
''
)
);
它希望结果为text[]
类型。或者,您可以通过添加array_to_string
将结果存储为字符串。