如何使用postgresql将带有多个标题和后续文本的文本拆分为两列?

时间:2017-04-25 20:26:59

标签: regex postgresql fasta

我的测试看起来如下:我有几个文本片段,其中一行标题是由'>'引入的。目前尚不清楚标题中出现哪种文本,只是它只是一行。 标题之后的文本片段的长度可以变化。如文本第一部分和第二部分之间所示,中间可能还有空行(见下文)。文本片段的数量也是可变的。

>Sequenz 1 Test 1234
MTEITAAMVKELRESTGAGMMDCKNALSETNGDFDKAVQLLREKGLGKAAKKADRLAAEG
LVSVKVSDDFTIAAMRPSYLSYEDLDMTFVENEYKALVAELEKENEERRRLKDPNKPEHK
IPQFASRKQLSDAILKEAEEKIKEELKAQGKPEKIWDNIIPGKMNSFIADNSQLDSKLTL
MGQFYVMDDKKTVEQVIAEKEKEFGGKIKIVEFICFEVGEGEVAAQL

>Sequenz 2 | Test: 1234
SATVSEINSETDFVAKNDQFIALTKDTTAHIQSNSLQSVEELHSSTINGVKFEEYLKSQI
ATIGENLVVRRFATLKAGANGVVNGYIHTNGRVGVVIAAACDSAEVASKSRDLLRQICMH
LVSVKVSDDFTIAAMRPSYLSYEDLDMTFVENEYKALVAELEKENEERRRLKDPNKPEHK
IPQFASRKQLSDAILKEAEEKIKEELKAQGKPEKIWDNIIPGKMNSFIADNSQLDSKLTL
MGQFYVMDDKKTVEQVIAEKEKEFGGKIKIVEFICFEVGEGEVAAQL
>Sequenz 3 : Test : 1234
MTEITAAMVKELRESTGAGMMDCKNALSETNGDFDKAVQLLREKGLGKAAKKADRLAAEG
LVSVKVSDDFTIAAMRPSYLSYEDLDMTFVENEYKALVAELEKENEERRRLKDPNKPEHK
IPQFASRKQLSDAILKEAEEKIKEELKAQGKPEKIWDNIIPGKMNSFIADNSQLDSKLTL
MGQFYVMDDKKTVEQVIAEKEKEFGGKIKIVEFICFEVGEGEVAAQL

我想把它分成两列。一个没有前导'>'的标题。第二列应包含相应的文本部分。

|Header                          |Text
|--------------------------------|-----------------------------------------------------------
|Sequenz 1 Test 1234             |MTEITAAMVKELRESTGAGMMDCKNALSETNGDFDKAVQLLREKGLGKAAKKADRLAAEG
|                                |LVSVKVSDDFTIAAMRPSYLSYEDLDMTFVENEYKALVAELEKENEERRRLKDPNKPEHK
|                                |IPQFASRKQLSDAILKEAEEKIKEELKAQGKPEKIWDNIIPGKMNSFIADNSQLDSKLTL
|                                |MGQFYVMDDKKTVEQVIAEKEKEFGGKIKIVEFICFEVGEGEVAAQL
|--------------------------------|-----------------------------------------------------------   
|Sequenz 2 | Test: 1234         |SATVSEINSETDFVAKNDQFIALTKDTTAHIQSNSLQSVEELHSSTINGVKFEEYLKSQI
|                                |ATIGENLVVRRFATLKAGANGVVNGYIHTNGRVGVVIAAACDSAEVASKSRDLLRQICMH
|                                |LVSVKVSDDFTIAAMRPSYLSYEDLDMTFVENEYKALVAELEKENEERRRLKDPNKPEHK
|                                |IPQFASRKQLSDAILKEAEEKIKEELKAQGKPEKIWDNIIPGKMNSFIADNSQLDSKLTL
|                                |MGQFYVMDDKKTVEQVIAEKEKEFGGKIKIVEFICFEVGEGEVAAQL
|--------------------------------|-----------------------------------------------------------
|Sequenz 3 : Test : 1234       |MTEITAAMVKELRESTGAGMMDCKNALSETNGDFDKAVQLLREKGLGKAAKKADRLAAEG
|                                |LVSVKVSDDFTIAAMRPSYLSYEDLDMTFVENEYKALVAELEKENEERRRLKDPNKPEHK
|                                |IPQFASRKQLSDAILKEAEEKIKEELKAQGKPEKIWDNIIPGKMNSFIADNSQLDSKLTL
|                                |MGQFYVMDDKKTVEQVIAEKEKEFGGKIKIVEFICFEVGEGEVAAQL
|--------------------------------|-----------------------------------------------------------

我已经有一个select语句来提取标题。

SELECT split_part(regexp_split_to_table(trim(leading '>' 
FROM 'text from above'), E'>'),E'\n', 1)

但我真的不知道如何将标题分割成第二列后的文本。我很感激帮助!提前谢谢。

1 个答案:

答案 0 :(得分:0)

这将捕获第一组中的标题和第二组中的文本。

>(.*)([\s\S]*?)(?=\R>|$)

它会捕捉>到换行符后的所有内容。然后它会捕获所有内容,然后是换行符,后跟>字符串结尾。

See it here at regex101