regex 使用给定的unicode序列作为分隔符拆分字符串并保留delimeter

suzh9iv8  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(86)

这可能是一个可能的重复,但我尝试了许多可用的答案从这里,但没有一个工作为我的要求。
我想使用listOf(“”,“”)分隔符将String =“”拆分为["“,“”,“”],并希望将它们保留在上面的结果数组中。请注意,字符串本身是由一组字符组成的。

roejwanj

roejwanj1#

只使用作为一个向后看给出的分隔符,分裂到你想要的,除了最后一个元素:

String str = "क्षत्रिय";
List<String> delims = List.of("श्र","क्ष","त्र","ज्ञ");
String[] parts = str.split("(?<=(" + String.join("|", delims) + "))");

输出量:

[क्ष, त्र, िय]

为了完全按照你的愿望分割,我必须在最后一个字符上添加一个备用分割:

String[] parts = str.split("(?<=(" + String.join("|", delims) + "))|(?=.$)");

输出量:

[क्ष, त्र, ि, य]
yc0p9oo0

yc0p9oo02#

不确定这是否是Java vsKotlin的问题(因为我所关注的答案来自Java,考虑到两者都是可互操作的),但根本问题在于Kotlin的split方法中使用的直接字符串字面量。
下面的代码不起作用:

val array = "क्षत्रिय".split("(?<=(श्र|क्ष|त्र|ज्ञ))|(?=.\$)")
println(array)

Answer: [क्षत्रिय] // no split

但使用Pattern.compile(<string_regex>)如下工作:

val array = "क्षत्रिय".split(Pattern.compile("(?<=(श्र|क्ष|त्र|ज्ञ))|(?=.\$)"))
println(array)

Answer: [क्ष, त्र, ि, य] // splits as expected

AndroidStudio中这两段代码的区别:

单行正则表达式是从Bohemian对这个问题的回答中得出的。

相关问题