Regex 正则表达式捕获组帮助netsuite/oracle
我已经在regex101上玩了一段时间了,但我无法理解这一点,可能是因为NetSuite中使用的regex版本。在regex101上,它使用下面的字符串突出显示我想要作为组1的部分,但在NetSuite中不会产生任何结果 我试过:Regex 正则表达式捕获组帮助netsuite/oracle,regex,netsuite,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-
(?:,[^,]+,?){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 |
[^,]*,[^,]*,[^,]*,([^,]*),?
我曾经尝试过其他“非捕获组”,结果很奇怪,这让我觉得它不受支持,或者我使用它们不正确
任何帮助都将不胜感激。谢谢 我猜这个表达式可能会返回所需的数据:
.+?,.+?,.+?,(.+?)(?:\s*,|\s*$)
在最复杂的情况下,您可以使用:
^([^,]*),([^,]*),([^,]*),([^,]*),?$
然后,您可以使用\1
、\2
、\3
、\4
访问所需的任何字段
测试
如果所有内容都在一行上,则需要字符串中的每四个元素 更新后的正则表达式为:
W-CHEVUS |
W-CHEVLPFULL-LP | KM8014
W-ADITIVOSSM-SM |
W-EMPTYAVAILABLE | KM8512
W-EMPTYAVAILABLE |
[^,]*,[^,]*,[^,]*,([^,]*),?
使用\1
获取字符串
测试
当然,我不知道您的特定工具的特性,因此我无法“补偿”它们。也许您可以使用单个捕获组和锚来断言字符串的开头。您的价值将在第一个捕获组中
^[^,]+(?:,[^,]+){2},([^,]+)
字符串的开头^
匹配1+次而不是逗号[^,]+
匹配逗号重复2次,然后不是逗号重复1次以上(?:,[^,]+){2}
匹配第三个逗号,
在组1中捕获匹配的1+次而不是逗号([^,]+)
由于您实际上是在幕后使用Oracle,因此您可以使用
REGEXP_SUBSTR(col, '^([^,]*,){3}([^,]+)', 1, 1, NULL, 2)
见
详细信息
-字符串的开头^
-第1组出现三次,匹配除([^,]*,){3}
以外的任何0个或多个字符,然后是一个,
,
-第2组匹配一个或多个字符,而不是([^,]+)
,
最后一个
2
参数意味着只返回第2组值。Netsuite中的正则表达式风格是什么?是否有任何方法允许您访问组?试试(?我猜这是oracle数据库使用的任何东西。我正在调用REGEXP_SUBSTR()函数。搜索将我带到这里:如果它是oracle,请使用REGEXP_SUBSTR(col,'^([^,]*,){3}([^,]+'),1,1,NULL,2)
什么是上下文?数据来自何处?如果这发生在suitescript中,那么是什么类型的脚本?我会问,因为您粘贴的数据不是我所知道的任何自然Netsuite数据格式。谢谢,这组数据位于第二个和第三个逗号之间,而不是第三个和第四个逗号之间,所以我将其切换为.+,.+,.+,(.+)这里的问题是,它实际上选择了与我想要的相反的结果。有什么想法吗?我非常喜欢这个解决方案的想法,在测试中,第4组正是我想要的。当我在演示或应用程序中尝试时,它没有给我任何结果,所以可能这对这种风格的正则表达式不起作用?从更多的实践来看,它看起来像是重复的无论第一个“完全匹配”是什么,添加不同的反向引用都会改变结果。此外,我意识到开头有“^”,结尾有$,实际返回的字符串是一行,为了可读性oops,我在示例中将其设置为多行。