从字符串中提取阿拉伯语单词(不是语义阿拉伯语短语)


String description="Big data is a broad term for data sets so large or complex that traditional data processing applications are inadequate. البيانات الضخمة هي عبارة عن مجموعة من مجموعة البيانات الضخمة جداً والمعقدة لدرجة أنه يُصبح من الصعب معالجتها باستخدام أداة واحدة فقط من أدوات إدارة قواعد البيانات أو باستخدام تطبيقات معالجة البيانات التقليدية. "

我需要一个正则表达式来只提取阿拉伯语单词。

我检查了这个票证,然而,它是一个PHP票证,而我需要JAVA正则表达式。

import java.util.regex.*;
Pattern p = Pattern.compile("#(?:[x{0600}-x{06FF}]+(?:s+[x{0600}-x{06FF}]+)*)#u");
print(p.matcher(description).group(1));

会引发错误。

要查找一个或多个阿拉伯字符,可以使用p{InArabic}+

这个类在模式文档中没有直接提到,但是它给了我们关于

的信息。

Unicode脚本、块、类别和二进制属性的类
p{IsLatin}拉丁字符(script)
p{InGreek}希腊块(block)中的字符
p{Lu}大写字母(类别)
p{IsAlphabetic}一个字母字符(二进制属性)

p{InGreek}的例子鼓励我们可以开始阅读关于块,找到

使用前缀In指定,如InMongolian,或使用关键字block(或其简写形式blk)指定,如block=Mongolianblk=Mongolian

Pattern支持的块名是UnicodeBlock.forName接受并定义的有效块名。

最后一句话对我们来说是最重要的。现在我们需要看看UnicodeBlocks是否应该支持一组阿拉伯字符。我们访问它的文档在这里可以找到字段

public static final Character.UnicodeBlock ARABIC

表示支持阿拉伯字符块


所以要找到单个阿拉伯单词,你的代码可以像这样:

String description="Big data is a broad term for data sets so large or complex that traditional data processing applications are inadequate. البيانات الضخمة هي عبارة عن مجموعة من مجموعة البيانات الضخمة جداً والمعقدة لدرجة أنه يُصبح من الصعب معالجتها باستخدام أداة واحدة فقط من أدوات إدارة قواعد البيانات أو باستخدام تطبيقات معالجة البيانات التقليدية. ";
Pattern p = Pattern.compile("\p{InArabic}+";
Matcher m = p.matcher(description);
while(m.find()){
    System.out.println(m.group());
}
输出:

البيانات
الضخمة
هي
.
.
.
البيانات
التقليدية

如果您想查找由一个或多个空格分隔的阿拉伯单词组,您可以使用此模式

Pattern p = Pattern.compile("\p{InArabic}+(?:\s+\p{InArabic}+)*");

你可能想知道* -代表零或多个,+ -一个或多个

这个正则表达式的意思是

\p{InArabic}+     # one or more Arabic characters (Arabic word)
(?:                # non-capturing group storing:
  \s+             # one or more whitespace characters
  \p{InArabic}+   # with another Arabic word after it
)*                 # zero or more times

最新更新