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

5
我有一个正则表达式\p{L}\p{M}*,用于将单词分解为字符,这在印地语或泰语中尤其需要,因为字符可能包含多个“字符”,例如मछली。如果以Java的常规方式拆分,则会得到[म][छ][ल][ी]。而我想要[म][छ][ली]。
我一直在努力改进此正则表达式,以便包括空格字符,以便当我拆分फार्म पशु时,我会得到以下组[फा][र्][म][ ][प][शु]。但是我没有成功。是否有人能帮帮我?
此外,如果有人在java中有替代方法,那也可以是另一种解决方案。我的当前Java代码是:
Pattern pat = Pattern.compile("\\p{L}\\p{M}*");
    Matcher matcher = pat.matcher(word);
    while (matcher.find()) {
        characters.add(matcher.group());
    }
1个回答

9
考虑使用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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接