我已经在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 |
我尝试了其他“非捕获组”,但结果很奇怪,这使我认为它不受支持,或者我使用它们的方式不正确。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
在最复杂的情况下,您可以使用:
^([^,]*),([^,]*),([^,]*),([^,]*),?$
然后,您可以使用\1
,\2
,\3
,\4
来访问所需的任何字段。
测试here。
如果所有内容都在一行上,那么您就需要字符串中的第四个元素。
更新后的正则表达式为:
[^,]*,[^,]*,[^,]*,([^,]*),?
使用\1
获取字符串。
测试here。
当然,我不知道您使用的特定工具的特殊性,因此我无法对其进行“补偿”。
答案 1 :(得分:1)
也许您可以使用单个捕获组和一个定位符来断言字符串的开头。您的价值将在第一个捕获组中
^[^,]+(?:,[^,]+){2},([^,]+)
^
字符串的开头[^,]+
匹配1次以上而不是逗号(?:,[^,]+){2}
重复两次匹配逗号,然后再重复1次以上而不是逗号,
匹配第三个逗号([^,]+)
在第1组中匹配超过1次而不是逗号的捕获答案 2 :(得分:0)
答案 3 :(得分:0)
由于您实际上是在幕后使用Oracle,因此可以使用
REGEXP_SUBSTR(col, '^([^,]*,){3}([^,]+)', 1, 1, NULL, 2)
请参见regex demo
详细信息
^
-字符串的开头([^,]*,){3}
-组1的三个匹配项,除了匹配,
以外的任何0个或更多字符,然后匹配,
([^,]+)
-第2组匹配一个或多个除,
以外的字符。最后一个2
参数表示仅返回第2组值。