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

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}+

Pattern文档没有直接提到这个类,但是它提供了关于的信息

Unicode脚本,块,类别和二进制属性的类
\p{IsLatin}拉丁文字符( 脚本 )
\p{InGreek}希腊街区中的一个角色( 街区 )
\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()); } البياناتالضخمةجداوالمعقدةلدرجةأنهيصبحمنالصعبمعالجتهاباستخدامأداةواحدةفقطمنأدواتإدارة 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