拆分非阿拉伯字符

时间:2013-12-31 10:56:40

标签: java regex

我有一个像这样的字符串

أصبح::ينال::أخذ::حصل (على)::أحضر

我想用java

将它拆分为非阿拉伯字符

这是我的代码

String s = "أصبح::ينال::أخذ::حصل (على)::أحضر";
String[] arr = s.split("^\\p{InArabic}+");
System.out.println(Arrays.toString(arr));

输出

[, ::ينال::أخذ::حصل (على)::أحضر]

但我希望输出为

[ينال,أخذ,حصل,على,أحضر]

所以我不知道这有什么问题?

2 个答案:

答案 0 :(得分:17)

你需要一个否定的类,要做到这一点,你需要方括号[ ... ]。试着用这个分开:

"[^\\p{InArabic}]+"

如果\\p{InArabic}与任何阿拉伯字符匹配,则[^\\p{InArabic}]将匹配任何非阿拉伯字符。


您可以考虑使用的另一个选项是等效语法,使用P代替p来指示与\\p{InArabic}字符类相反的内容,如@Pshemo所述:

"\\P{InArabic}+"

这就像\\W\\w相反。

第一种语法在第二种语法中获得的唯一可能优势(再次提到@Pshemo),如果你想将其他字符添加到不匹配的字符列表中,例如,如果你想要的话要匹配除期间以外的所有非\\p{InArabic},第一个更灵活:

"[^\\p{InArabic}.]+"
                ^

否则,如果您真的想使用\\P{InArabic},则在课程中需要subtraction

"[\\P{InArabic}&&[^.]]+"

答案 1 :(得分:16)

您想要的表达式是"\\P{InArabic}+"

这意味着匹配非阿拉伯语的任何(非零)字符数。

相关问题