是否有正则表达式可以在以下字符串中获取第 5 次出现?

Is there a Regex to get 5th occurence in a following string?

提问人:G0000000se 提问时间:12/10/2022 最后编辑:bobble bubbleG0000000se 更新时间:12/11/2022 访问量:42

问:

我有一个以下字符串(好吧,实际上是UTM):

bla-ble-blo-bli-this-bad-blau-bleu
bla-ble-blo-bli-this_good-blau-bleu

UTM 中的第 5 个位置称为“主题”,目前由于我使用 SQL 进行任何类型的转换,因此我使用一组非常简单的规则和一些查找表,因为我在“”上拆分字符串,但正如您所看到的,它在“this-bad”上失败,因为它有一个“”,但它在“”上按预期工作。--this_good

是否有正则表达式可以获得此“主题”部分的第 5 次出现?我尝试遵循正则表达式,但我真的不知道如何设置它只找到第 5 次出现。有问题的正则表达式:.\w+(?=-[^-]*$)

谢谢!

SQL 正则表达式 字符串匹配 顶点

评论

0赞 JHH 12/10/2022
this-bad打破了模式,这是模式识别中不起作用的问题。也可能出现在 1st、2nd......第六?还是只有第 5 名?-this-bad
0赞 G0000000se 12/10/2022
嗨,@JHH,它可能只出现在第 5 位,而不是第 4 位或第 6 位或任何其他位置。不幸的是,是的,我知道它打破了这种模式。
0赞 Bohemian 12/10/2022
总是有 7 个部分吗?另外,请添加您正在使用的数据库的标签。
0赞 G0000000se 12/10/2022
嗨,@Bohemian,我已经使用我们正在使用的 RDBMS 更新了标签。此外,总是有超过 5 个破折号 (“-”),但重要的是,这个打破模式的字符串总是排在第 5 位。
0赞 Bohemian 12/10/2022
但是,即使第 5 个部分可能包含破折号,输入中是否最多有 7 个部分?

答:

3赞 Bohemian 12/10/2022 #1

去掉尾巴和头部,留下第 5 部分:

select regexp_replace(regexp_replace('bla-ble-blo-bli-this-bad-blau-bleu', '(-[^-]+){2}$', ''), '([^-]+-){4}', '')

观看现场演示

评论

0赞 G0000000se 12/10/2022
做伎俩。谢谢!
0赞 G0000000se 12/10/2022
嗯,看来我说得太早了。例如,如果你看一下下面的演示,它就不起作用了:链接
0赞 Bohemian 12/10/2022
@G0000000se 你发布的链接是我的链接。如果您想进行新的测试,您需要单击“更新”。或者只是在这里发送消息,其中包含不起作用的输入以及您期望的输出。
0赞 G0000000se 12/10/2022
哦,我的错。在这种情况下,您可以在此处看到它(实际的“实时”示例):预期结果。而这个结果很糟糕。在第二个示例中,我需要将“Superapp”和“dis”放在两个单独的列中。这就是为什么很难真正想出一个模式的原因。
0赞 Bohemian 12/11/2022
@G0000000se如何区分具有第 5 项的 8 项字符串和具有第 5 项的 7 项字符串?dis-bet-ret-int-Supercard-CashBack-dis-allSupercardSupercard-CashBack