如何在oracle中使用REGEXP_SUBSTR解析txt文件?

时间:2016-02-02 12:12:05

标签: regex oracle parsing plsql substring

我有很多格式相同的txt卡。 我需要解析它以从中获取一些值。 我不明白如何在Oracle中使用regexp substr。请帮助我编写sql语句,它返回值,我在** - 符号之间标记(例如:第一个字符串,02/02/11,AA11223344等):

From: "abc def (**first string**)" <email@site.com>
02/01/2011  09:27                                    First Date  : **02/02/11**
Player  : BILL BROWN                                 ID          : **AA11223344**
At      : YELLOW STREET.                             CD Number   : **A11223FER**
                                                     Code        :          
BUYS    : **123M**          (M) of AAA 0 02/02/11        Owner       : **England**
                                                     Shiped      : **02/04/11**
Number  : **11.223344**     Digi     : **1.2370000**
Ddate:  **02/04/11**
Notes     : **First line here**
* Size       :                                            **USD 11,222,333.44** 
* Own ( **0 days** ):                                                    **0.00** 
* Total      :                                            USD **222,333,444.55** 

1 个答案:

答案 0 :(得分:0)

您可以使用hierarchical queries递归地应用正则表达式评估;在每个级别,您将查找字符串中出现的级别。

请注意&#34;非贪心&#34;模式字符串中的operator(??),解释了here,以及正则表达式函数。

with test as (
    select 'From: "abc def (**first string**)" <email@site.com>
            02/01/2011  09:27                                    First Date  : **02/02/11**
            Player  : BILL BROWN                                 ID          : **AA11223344**
            At      : YELLOW STREET.                             CD Number   : **A11223FER**
                                                                 Code        :          
            BUYS    : **123M**          (M) of AAA 0 02/02/11        Owner       : **England**
                                                                 Shiped      : **02/04/11**
            Number  : **11.223344**     Digi     : **1.2370000**
            Ddate:  **02/04/11**
            Notes     : **First line here**
            * Size       :                                            **USD 11,222,333.44** 
            * Own ( **0 days** ):                                                    **0.00** 
            * Total      :                                            USD **222,333,444.55** ' as txt
from dual
)
select TRIM('*' FROM regexp_substr(txt, '\*\*(.*??)\*\*', 1, LEVEL, 'n') ) 
from test
    CONNECT BY regexp_subSTR(txt, '\*\*(.*??)\*\*', 1, LEVEL, 'n') is not null