我有一个像这样的字符串
أصبح::ينال::أخذ::حصل (على)::أحضر
我想用java
将它拆分为非阿拉伯字符这是我的代码
String s = "أصبح::ينال::أخذ::حصل (على)::أحضر";
String[] arr = s.split("^\\p{InArabic}+");
System.out.println(Arrays.toString(arr));
输出
[, ::ينال::أخذ::حصل (على)::أحضر]
但我希望输出为
[ينال,أخذ,حصل,على,أحضر]
所以我不知道这有什么问题?
答案 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}+"
这意味着匹配非阿拉伯语的任何(非零)字符数。