我正在尝试编写一个执行以下操作的正则表达式: 删除标点符号,非阿拉伯语单词和数字,除了点和逗号。
我想在java中使用两个独立的正则表达式来执行以下操作:
请注意,我知道以下内容,但我无法从regx中排除不匹配的点和逗号:
"[\\p{P}\\p{Digit}]"
- >用于删除数字和标点符号正则表达式
"[^\\p{InArabic}]+"
- >删除非阿拉伯字母正则表达式
示例:
العمر(age):هوالشيءالوحيدالذيكلمازادنقص。
执行两个正则表达式之后,我们应该得到以下内容: العمرهوالشيءالوحيدالذيكلمازاد نقص。
任何帮助都将受到赞赏,因为我尝试了很多可能性,但所有这些都没有用。
答案 0 :(得分:6)
您可以使用与集合交集运算符&&
组合的否定字符类:
"[^.,&&[\\p{P}\\p{Digit}]]+"
匹配数字和标点符号,逗号和句点除外。
对于第二个问题,只需将逗号/句点添加到已经否定的charclass:
"[^\\p{InArabic}.,]+"
要结合两者,您可以使用
"[^.,&&[\\P{InArabic}\\p{P}\\p{Digit}]]+"
答案 1 :(得分:1)
如果您想从集合中排除某些元素,可以使用此集合的intersection,其中包含要排除的元素旁边的所有内容(complement set)。换句话说:
A
\
B = A∩
B c
在正则表达式中,字符类[...]
的交叉点代表&&
,因此您可以尝试类似
"[\\p{P}\\p{Digit}&&[^,.]]"
"[\\P{InArabic}&&[^,.]]"
(\\P{xxx}
否定\\p{xxx}
,反之亦然)