我想在这段代码中编辑REGEX_PATTERN2,以便使用阿拉伯标点符号的matches()方法
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()方法来获得带有阿拉伯标点符号的相同输出
发布于 2018-10-18 11:45:38
[]
表示正则表达式字符类,这意味着它只匹配单个字符。...
为3个字符,因此不能在字符类中使用。
在字符类中,不需要使用|
分隔字符,也不需要对.
和?
进行转义。
您的意思可能是这样,这是一个备用字符序列的列表:
"(?:\\.|,|:|;|!|\\?|،|؛|؟|\\.\\.|\\.\\.\\.)+"
如果在以下情况下使用字符类,您可能会获得更好的性能:
"(?:\\.{1,3}|[,:;!?،؛؟])+"
当然,在+
的末尾,在每次迭代中匹配1-3个周期是相当多余的,所以这样做:
"[.,:;!?،؛؟]+"
发布于 2018-10-18 13:46:34
这里有一种不同的方法,它使用Unicode属性而不是特定字符(如果您关心的不仅仅是另一个答案中提到的问号和逗号):
"(?=^[\\p{InArabic}.,:;!?]+$)^\\p{IsPunctuation}+$"
它匹配具有标点符号类别的整个字符串,这些字符也在阿拉伯语块中,或者是您在努力中列出的其他标点符号之一。
它将匹配像"؟،"
或"؟،:"
这样的字符串,但不匹配"؟،ؠ"
或"؟،a"
。
https://stackoverflow.com/questions/52866576
复制相似问题