NetSuite 保存的搜索:REGEXP_SUBSTR 模式问题

NetSuite Saved Search: REGEXP_SUBSTR Pattern troubles

我正在尝试分解如下所示的字符串:

|5~13~3.750~159.75~66.563~P20~~~~Bundle A~~|

这里提供第二个例子供参考:

|106~10~0~120~1060.000~~~~~~~|

这是静态尺寸项目的第三个示例:

|3~~~~~~~~~~~5:12|

示例 4:

|3~23~5~281~70.250~upper r~~~~~~|
|8~22~6~270~180.000~center~~~~~~|
|16~22~1~265~353.333~center~~~~~~|

有时同一个字符串中有多行。

我不太熟悉为 regexp_substr 设置模式,希望得到一些帮助!

字符串总是有'|'在开头和结尾,11 '~' 用于分隔我希望获得的 numeric/text 值。此外,一些数字字符有小数点,而另一些则没有。如果它有助于像这样分隔值:

|Quantity~ Feet~ Inch~ Unit inches~ Total feet~ Piece mark~ Punch Pattern~ Notch~ Punch~ Bundling~ Radius~ Pitch|

正如你所看到的,如果没有指定的东西它显示为空白,但它可能在另一个字符串中有它们,所有值都有数据的情况很少见。

对于这个具体案例,我相信 regexp_substr 将是我的最佳选择,但如果有人有其他建议,我很乐意试一试!

这是我到目前为止能够想出的公式(文本)

REGEXP_SUBSTR({custbody_msm_cut_list},'[[:alnum:]. ]+|$',1,1)

这使我能够提取字符串中的所有匹配项,但如果排除了某些字段,则很难显示正确的数据。

TRIM(REGEXP_SUBSTR({custbody_msm_cut_list}, '^\|(([^~]*)~){1}',1,1,'i',2))

从字符串的开头开始,匹配竖线字符 |,然后匹配波浪号以外的任何字符 ~,然后匹配波浪号。重复N次{1}。 Return 这些重复中的最后一个。

您可以控制大括号中的整数处理多少波浪号{1}

EG:

TRIM(REGEXP_SUBSTR('|Quantity~ Feet~ Inch~ Unit inches~ Total feet~ Piece mark~ Punch Pattern~ Notch~ Punch~ Bundling~ Radius~ Pitch|', '^\|(([^~]*)~){1}',1,1,'i',2))

returns“数量”

TRIM(REGEXP_SUBSTR('|Quantity~ Feet~ Inch~~~ Piece mark~ Punch Pattern~ Notch~ Punch~ Bundling~ Radius~ Pitch|', '^\|(([^~]*)~){7}',1,1,'i',2))

returns“打孔图案”

最终值 Pitch 是一个稍微特殊的情况,因为它后面没有波浪号:

TRIM(REGEXP_SUBSTR('|~~~~~~~~~~ Radius~ Pitch|', '^\|(([^~]*)~){11}([^\|]*)',1,1,'i',3))

改编自