Kotlin中用于分割字符串的正则表达式

3

我希望能够根据字符对字符串进行分组。

例如,我想将以下URL拆分为两个组:

group 1 -   /viewarticle/abd-fdj-gfg-to
group2 - 628882 (last string)

/viewarticle/abd-fdj-gfg-to-628882

我尝试过这个正则表达式 " -(?!.*-) ",但是它没有起作用。
我必须只使用正则表达式,不能使用split函数。
任何帮助都将不胜感激。
2个回答

4
您可以简单地使用组 () .*- 来捕获第一个输入和剩余部分作为第二个输入,因此请使用:
(.*-)([a-zA-Z\\d]+)

演示

val regex = "(.*-)([a-zA-Z\\d]+)".toRegex() // use only (\\d+) for digits
val matchResults = regex.find("/viewarticle/abd-fdj-gfg-to-628882")!!
val (link, id) = matchResults.destructured
println("Link: $link \nID: $id")

详情:

.*- :匹配最后一个-之前的任何内容

[a-zA-Z\\d]+ :匹配0个或多个字母a-zA-Z或数字


3

您可以尝试使用后顾,例如在以下内容上进行拆分:

(?<=-to)-

你可以让回顾表达式更加具体:
(?<=abd-fdj-gfg-to)-

但是,只有在 -to 前面的内容总是相同才有意义。
编辑:
如果您需要在最后一个连字符上拆分,则使用负向前瞻:
-(?!.*-)

这个字符串可以是任何东西。我必须提取最后一个“-”后面的字符串。 - Ragini
@Ragini 然后按 -(?!.*-) 进行拆分... 这将会在最后一个连字符处进行拆分。 - Tim Biegeleisen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接