正则表达式捕获组帮助netsuite / oracle

时间:2019-07-03 23:27:18

标签: regex netsuite

我已经在regex101上玩了一段时间,无法弄清楚,也许是因为NetSuite中使用了regex的版本。在regex101上,使用下面的字符串突出显示我希望作为组1的部分,但在NetSuite中什么都没有。

我已经尝试过:(?:,[^,]+,?){2}(,[^,]+,?) 尝试从此数据集中获取第3个和第4个逗号之间的值:

+000000006 06:23:15.291450,W-CHEVLPFULL-LP | ,+000000006 06:23:15.291450,W-CHEVUS | ,
+000000044 08:09:52.291450,W-ADITIVOSSM-SM | KM8014,+000000044 08:09:52.291450,W-CHEVLPFULL-LP | KM8014,
+000000125 00:53:18.291450,W-ADITHPSMFULL-HP-SM | ,+000000125 00:53:18.291450,W-ADITIVOSSM-SM | ,
+000000138 05:08:01.291450,W-ADITHPSMFULL-HP-SM | KM8512,+000000138 05:08:01.291450,W-EMPTYAVAILABLE | KM8512,
+000000138 05:20:45.291450,W-ADITIVOSSM-SM | ,+000000138 05:20:45.291450,W-EMPTYAVAILABLE |

将会是:

W-CHEVUS | 
W-CHEVLPFULL-LP | KM8014
W-ADITIVOSSM-SM | 
W-EMPTYAVAILABLE | KM8512
W-EMPTYAVAILABLE |

我尝试了其他“非捕获组”,但结果很奇怪,这使我认为它不受支持,或者我使用它们的方式不正确。

任何帮助将不胜感激。谢谢!

4 个答案:

答案 0 :(得分:1)

在最复杂的情​​况下,您可以使用:

^([^,]*),([^,]*),([^,]*),([^,]*),?$

然后,您可以使用\1\2\3\4来访问所需的任何字段。

测试here


如果所有内容都在一行上,那么您就需要字符串中的第四个元素。

更新后的正则表达式为:

[^,]*,[^,]*,[^,]*,([^,]*),?

使用\1获取字符串。

测试here

当然,我不知道您使用的特定工具的特殊性,因此我无法对其进行“补偿”。

答案 1 :(得分:1)

也许您可以使用单个捕获组和一个定位符来断言字符串的开头。您的价值将在第一个捕获组中

^[^,]+(?:,[^,]+){2},([^,]+)
  • ^字符串的开头
  • [^,]+匹配1次以上而不是逗号
  • (?:,[^,]+){2}重复两次匹配逗号,然后再重复1次以上而不是逗号
  • ,匹配第三个逗号
  • ([^,]+)在第1组中匹配超过1次而不是逗号的捕获

Regex demo

答案 2 :(得分:0)

我的猜测是该表达式可能返回所需的数据:

.+?,.+?,.+?,(.+?)(?:\s*,|\s*$)

DEMO

答案 3 :(得分:0)

由于您实际上是在幕后使用Oracle,因此可以使用

REGEXP_SUBSTR(col, '^([^,]*,){3}([^,]+)', 1, 1, NULL, 2)

请参见regex demo

详细信息

  • ^-字符串的开头
  • ([^,]*,){3}-组1的三个匹配项,除了匹配,以外的任何0个或更多字符,然后匹配,
  • ([^,]+)-第2组匹配一个或多个除,以外的字符。

最后一个2参数表示仅返回第2组值。