gpt4 book ai didi

任何语言的字母的Java正则表达式

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:13:56 26 4
gpt4 key购买 nike

标题不是 100% 准确,我已经阅读了相关问题,虽然接近了,但它们并没有真正帮助案例。

我想拆分一个字符串,以便所有非字母字符都是一个项目,考虑任何位置的任何字符组合,无论是在开始/结束时的双/三空格等。示例要好得多比我能描述的任何方式:

字符串:“你好,蒂姆!”
期望的结果:{"", "Hello", ",", "", "Tim", "!", "", ""}

字符串:“嗨 123!&*”
期望的结果:{"Hi", "", "1", "2", "3", "!", "&", "*"}

字符串:“الْ♬ُمْلوُ الاسْمِيَُّ 2”
期望的结果:{"", "2", "", "الْ♬ُمْلوُ","الاسْمِيَّ⑩ُ"}

我尝试的第一个正则表达式是:"\\P{L}"(匹配非分类字母)这不适用于阿拉伯语或其他复杂脚本(也尝试过卡纳达语)

第二次尝试:"\\p{Space}|\\p{Punct}|\\p{Digit}"(匹配几乎所有我想分割的字符)。这样效果更好,任何语言的单词似乎都可以完美地组合在一起,但是对于双倍/三倍空间之类的东西,我得到了不希望的结果,这是一个例子;

字符串:“嗨”
结果:{"Hi", "", ""}(正确)

字符串:“嗨嗨”
结果:{"Hi", "", "", "", "", "Hi"}(不正确,空格太多)

提前致谢!

最佳答案

这适用于所有语言:

str.split("(?<=\\P{L})|(?=\\P{L})")

对于非字母,它使用向后看或向前看的交替进行拆分。


更新:

虽然以上适用于“大多数”语言,但卡纳达语脚本字符似乎不被视为“字母”。此解决方法正则表达式在空格、数字(任何语言)和标点符号上中断,适用于“非字母”脚本:

str.split("(?<=[\\s\\p{N}\\p{Punct}])|(?=[\\s\\p{N}\\p{Punct}])");

这个使用谷歌翻译创建的阿拉伯语示例有效:

String str = "شكرا  جزيلا";
String[] split = str.split("(?<=\\P{L})|(?=\\P{L})");
System.out.println(Arrays.toString(split));

输出:

[شكرا,  ,  , جزيلا]

关于任何语言的字母的Java正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39358511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com