拆分非阿拉伯字符

Tar*_*lah 14 java regex

我有这样的字符串

????::????::???::??? (???)::????
Run Code Online (Sandbox Code Playgroud)

我想用java将它拆分为非阿拉伯字符

这是我的代码

String s = "????::????::???::??? (???)::????";
String[] arr = s.split("^\\p{InArabic}+");
System.out.println(Arrays.toString(arr));
Run Code Online (Sandbox Code Playgroud)

输出是

[, ::????::???::??? (???)::????]
Run Code Online (Sandbox Code Playgroud)

但我希望输出是

[????,???,???,???,????]
Run Code Online (Sandbox Code Playgroud)

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

Jer*_*rry 17

你需要一个否定的类,要做到这一点,你需要方括号[ ... ].尝试分裂:

"[^\\p{InArabic}]+"
Run Code Online (Sandbox Code Playgroud)

如果\\p{InArabic}匹配任何阿拉伯字符,那么[^\\p{InArabic}]将匹配任何非阿拉伯字符.


您可以考虑的另一个选项是等效语法,P而不是像@Pshemo所提到的那样p指示与\\p{InArabic}字符类相反的方法:

"\\P{InArabic}+"
Run Code Online (Sandbox Code Playgroud)

这就像是\\W相反的\\w.

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

"[^\\p{InArabic}.]+"
                ^
Run Code Online (Sandbox Code Playgroud)

否则,如果你真的想使用\\P{InArabic},你需要在类中减法:

"[\\P{InArabic}&&[^.]]+"
Run Code Online (Sandbox Code Playgroud)

  • 如果我没有弄错,`\ P {xxx}`是对`\ p {xxx}`的否定所以不需要`[^\p {xxx}]`(除非你想添加更多`\ p {xyz}`类到`[...]`). (8认同)

Daw*_*ica 16

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

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