【问题标题】:Handle Unicode Words in Regex Parsing在正则表达式解析中处理 Unicode 单词
【发布时间】:2018-04-05 14:35:51
【问题描述】:

我正在尝试在一种印度语言(孟加拉语)中获取特定单词之前的所有单词。该技术非常适合英语,但不适用于孟加拉语:

Pattern p = Pattern.compile("([\\w\\s]+) ছবি", Pattern.UNICODE_CASE);
Matcher m = p.matcher("ক্যামেরাকে ছবি তোলা এবং ভিডিও রেকর্ড এর অনুমতি দেবেন");

while (m.find()) {
      System.err.println(m.group(1));
}

所以理想情况下,我试图将单词ক্যামেরাকে 作为输出,它位于文本ছবি তোলা এবং ভিডিও রেকর্ড... 之前。顺便说一下,这是本例中的第一个词,但可能并非如此。

我该怎么做?好吧,我正在尝试在 Android 上执行此操作。

编辑

在这里尝试 Java 解决方案:

谢谢!

【问题讨论】:

  • 你遇到了什么错误?
  • @AmirHKH 我没有得到任何输出!
  • 试试\p{InBeng}, Pattern.compile("([\\p{InBeng}\\s]+) ছবি")
  • @WiktorStribiżew 我认为这与 JDK 6 和 7 有关。我现在正在尝试!似乎只有 JDK 7 支持这些标志
  • 顺便说一句,\p{L} 已经存在于 Java 6 中。

标签: java android regex string unicode


【解决方案1】:

将此用于孟加拉语字母:

Pattern.compile("([\\p{IsBeng}\\s]+) ছবি", Pattern.UNICODE_CASE);

\p{xxx} 可用于很多字符类,例如类别,也可用于脚本,您需要知道名称和前缀为Is

也可以使用

Pattern.compile("([\\w\\s]+) ছবি", Pattern.UNICODE_CHARACTER_CLASS);

但这会匹配任何字母表中的字母,所以我不确定你真正需要什么。

【讨论】:

  • 我尝试在 Android 中使用您的第一个解决方案,但失败了,它显示 isbeng 的未知字符类别。现在尝试第二个!
  • @Jeet.Deir 似乎\w 在Android 中默认支持Unicode。 Pattern.compile("([\\w\\s]+) ছবি") 应该按原样工作。
  • @WiktorStribiżew 我也是这么想的。它不适用于 Android
  • @WiktorStribiżew 我用一些细节更新了这个问题!此外,Andoird 不接受 Pattern.UNICODE_CHARACTER_CLASS 标志,因为它是由默认启用的。 :(
  • 任何人都在寻找答案,正确的标签是InBENGALI
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 2018-08-30
  • 2010-12-20
  • 2011-04-17
  • 1970-01-01
  • 2011-07-03
相关资源
最近更新 更多