匹配 Java 中的阿拉伯标点符号

我想在此代码中编辑 REGEX_PATTERN2 以使用阿拉伯标点符号的匹配()方法


 String REGEX_PATTERN = "[\\.|,|:|;|!|_|\\?]+";

        String s1 = "My life :is happy, stable";

        String[] result = s1.split(REGEX_PATTERN);

        for (String myString : result) {

            System.out.println(myString);   


}


         String REGEX_PATTERN2 = "[\\.|,|:|;|!|_|،|؛|؟\\?]+";

            String s2 = " حياتي ؛ سعيدة، مستقر";

            String[] result2 = s2.split(REGEX_PATTERN2);

            for (String myString : result2) {

                System.out.println(myString);   


    }

我想要的输出


我的生活


很开心


稳定的


حياتي


سعيدة


反义词


我如何编辑此代码并使用matches()而不是split()方法来获得带有阿拉伯标点符号的相同输出


智慧大石
浏览 219回答 3
3回答

翻阅古今

这里有几个问题。首先这个例子:  if (word.matches("[\\.|,|:|;|!|\\?]+"))由于以下原因,这有点1不正确:A.不需要在字符类中转义。A|并不意味着字符类中的交替。A?不需要在字符类中转义。(有关更多详细信息,请阅读javadoc或有关 Java 正则表达式的教程。)因此,您可以将上述内容重写为:  if (word.matches("[.,:;!?]+"))...假设您不想将管道字符归类为标点符号。现在这个: if (word.matches("[\.|,|:|;|!|،|؛|..|...|؟|\?]+"))你有和上面一样的问题。此外,您似乎使用了两个和三个句号/句点字符而不是(大概)某些 Unicode 字符。我怀疑它们可能是 a \ufbb7or u061eor \u06db,但我不是语言学家。(当然 2 或 3 个句号是不正确的。)那么阿拉伯语中的标点符号是什么?老实说,我认为答案取决于您查看的来源,但维基百科指出:只有阿拉伯语问号 ⟨؟⟩ 和阿拉伯语逗号 ⟨،⟩ 用于常规阿拉伯语文字输入,并且逗号经常被拉丁文字逗号 (,) 替代。1 - 稍微不正确,我的意思是这个例子中的错误大多是无害的。但是,您|在类中包含(多个实例)字符 n 确实意味着您会将“管道”错误地归类为标点符号。

侃侃尔雅

[]表示正则表达式字符类,这意味着它只匹配单个字符。...是 3 个字符,因此不能在字符类中使用。在字符类中,您不需要用 分隔字符|,也不需要转义.和?。你可能是这个意思,它是一个替代字符序列的列表:"(?:\\.|,|:|;|!|\\?|،|؛|؟|\\.\\.|\\.\\.\\.)+"如果您确实使用字符类,您可能会获得更好的性能:"(?:\\.{1,3}|[,:;!?،؛؟])+"当然,+在最后,每次迭代匹配 1-3 个周期是相当多余的,所以这样做:"[.,:;!?،؛؟]+"

梦里花落0921

这是一种不同的方法,它使用 Unicode 属性而不是特定字符(如果您关心更多的阿拉伯语标记,而不仅仅是另一个答案中提到的问号和逗号):"(?=^[\\p{InArabic}.,:;!?]+$)^\\p{IsPunctuation}+$"它匹配具有标点符号类别的整个字符串,这些字符串也位于阿拉伯语块中,或者是您在努力中列出的其他标点符号之一。它会匹配像"؟،"or 之类的字符串"؟،:",但不会匹配"؟،ؠ"or "؟،a"。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java