Unicode字符正则表达式,捕获组

时间:2014-08-20 05:15:12

标签: java regex unicode

我有一个正则表达式\ p {L} \ p {M} *我用来将单词分成字符,特别需要使用印地语或泰语单词,其中字符可以包含多个字符&#39 ;在其中,如 मछली 如果在Java中以常规方式拆分我得到 [म] [छ] [ल] [ी] 我想要的地方 [म] [छ] [ली]

我一直在努力改进这个正则表达式以包含空格字符 所以,当我分裂 फार्मपशु 我会得到跟随组 [फ隆] [र्] [म] [] [प] [शु]

但我没有运气。有人能帮助我吗?

此外,如果有人有另一种方法可以做到这一点,那么java也可以作为替代解决方案。我目前的java代码是

Pattern pat = Pattern.compile("\\p{L}\\p{M}*");
    Matcher matcher = pat.matcher(word);
    while (matcher.find()) {
        characters.add(matcher.group());
    }

1 个答案:

答案 0 :(得分:5)

考虑使用BreakIterator

String text = "मछली";
Locale hindi = new Locale("hi", "IN");
BreakIterator breaker = BreakIterator.getCharacterInstance(hindi);
breaker.setText(text);
int start = breaker.first();
for (int end = breaker.next();
  end != BreakIterator.DONE;
  start = end, end = breaker.next()) {
  System.out.println(text.substring(start,end));
}

我使用Oracle Java 8实现测试了示例字符串。如果需要,还要考虑ICU4J BreakIterator版本。