在Java中匹配阿拉伯语标点符号
我想在此代码中编辑REGEX_PATTERN2,以使用阿拉伯语标点符号的matches()方法在Java中匹配阿拉伯语标点符号,java,regex,arabic,Java,Regex,Arabic,我想在此代码中编辑REGEX_PATTERN2,以使用阿拉伯语标点符号的matches()方法 String REGEX_PATTERN = "[\\.|,|:|;|!|_|\\?]+"; String s1 = "My life :is happy, stable"; String[] result = s1.split(REGEX_PATTERN); for (String myString : result) { S
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()方法来获得带有阿拉伯标点符号的相同输出
[]
表示正则表达式字符类,这意味着它只匹配单个字符<代码>为3个字符,因此不能在字符类中使用
在字符类中,不需要用|
分隔字符,也不需要转义
和?
您的意思可能是,这是一个备用字符序列列表:
“(?:\\.\124;,:\\.\ 124;!\ 1248;\1248;\1246;\1246;\124\.\ 124\.\ 124\.\)+”
如果使用可以执行以下操作的角色类,您可能会获得更好的性能:
“(?:\.{1,3}.[,:;!?،؛؟])+”
当然,对于末尾的+
,在每次迭代中匹配1-3个周期是相当多余的,因此这样做可以:
“[,:;!?،؟]+”
[]
表示正则表达式字符类,这意味着它只匹配单个字符<代码>为3个字符,因此不能在字符类中使用
在字符类中,不需要用|
分隔字符,也不需要转义
和?
您的意思可能是,这是一个备用字符序列列表:
“(?:\\.\124;,:\\.\ 124;!\ 1248;\1248;\1246;\1246;\124\.\ 124\.\ 124\.\)+”
如果使用可以执行以下操作的角色类,您可能会获得更好的性能:
“(?:\.{1,3}.[,:;!?،؛؟])+”
当然,对于末尾的+
,在每次迭代中匹配1-3个周期是相当多余的,因此这样做可以:
“[,:;!?،؟]+”
这里有一些问题。首先,这个例子:
if (word.matches("[\\.|,|:|;|!|\\?]+"))
由于以下原因,这有点不正确:
不需要在字符类中转义|
并不意味着字符类中的交替?
不需要在字符类中转义 if (word.matches("[.,:;!?]+"))
。。。假设您不想将管道字符分类为标点符号
现在:
if (word.matches("[\.|,|:|;|!|،|؛|..|...|؟|\?]+"))
你有和上面一样的问题。此外,您似乎使用了两个和三个句号/句点字符,而不是(大概)某些Unicode字符。我怀疑他们可能是\ufbb7
或u061e
或\u06db
,但我不是语言学家。(当然,2或3个句号是不正确的。)
那么阿拉伯语的标点符号是什么呢 老实说,我认为答案取决于你看的是什么来源,但维基百科: 只有阿拉伯问号⟨؟⟩ 还有阿拉伯逗号⟨،⟩ 常用于常规的阿拉伯文打字,逗号通常代替拉丁语的逗号(,)
1-我的意思是,这个例子中的错误大多是无害的。但是,在类中包含
|
字符(多个实例)确实意味着您将错误地将“管道”分类为标点符号 这里有一些问题。首先,这个例子:
if (word.matches("[\\.|,|:|;|!|\\?]+"))
由于以下原因,这有点不正确:
不需要在字符类中转义|
并不意味着字符类中的交替?
不需要在字符类中转义 if (word.matches("[.,:;!?]+"))
。。。假设您不想将管道字符分类为标点符号
现在:
if (word.matches("[\.|,|:|;|!|،|؛|..|...|؟|\?]+"))
你有和上面一样的问题。此外,您似乎使用了两个和三个句号/句点字符,而不是(大概)某些Unicode字符。我怀疑他们可能是\ufbb7
或u061e
或\u06db
,但我不是语言学家。(当然,2或3个句号是不正确的。)
那么阿拉伯语的标点符号是什么呢 老实说,我认为答案取决于你看的是什么来源,但维基百科: 只有阿拉伯问号⟨؟⟩ 还有阿拉伯逗号⟨،⟩ 常用于常规的阿拉伯文打字,逗号通常代替拉丁语的逗号(,)
1-我的意思是,这个例子中的错误大多是无害的。但是,在类中包含
|
字符(多个实例)确实意味着您将错误地将“管道”分类为标点符号 这里有一种不同的方法,它使用Unicode属性而不是特定字符(如果您关心的是更多的阿拉伯标记,而不仅仅是另一个答案中提到的问号和逗号):
它匹配一整串具有标点符号类别的字符,这些字符也在阿拉伯语块中,或者是您在工作中列出的其他标点符号之一
它将匹配字符串,如
“؟1548;”
或”:“
,但不匹配“ؠ1568;”
或“،a”
这里有一种不同的方法,它使用Unicode属性而不是特定字符(如果您关心的是更多的阿拉伯标记,而不仅仅是另一个答案中提到的问号和逗号):
它匹配一整串具有标点符号类别的字符,这些字符也在阿拉伯语块中,或者是您在工作中列出的其他标点符号之一
它将匹配字符串,如“؟”<