删除标点符号,非阿拉伯语单词和数字,除了点和逗号

时间:2014-04-06 19:24:20

标签: java regex

我正在尝试编写一个执行以下操作的正则表达式: 删除标点符号,非阿拉伯语单词和数字,除了点和逗号。

我想在java中使用两个独立的正则表达式来执行以下操作:

  1. 删除除点和逗号之外的标点和数字。
  2. 删除除点和逗号之外的非阿拉伯语单词。
  3. 请注意,我知道以下内容,但我无法从regx中排除不匹配的点和逗号:

    "[\\p{P}\\p{Digit}]" - >用于删除数字和标点符号正则表达式

    "[^\\p{InArabic}]+" - >删除非阿拉伯字母正则表达式

    示例:

    العمر(age):هوالشيءالوحيدالذيكلمازادنقص。

    执行两个正则表达式之后,我们应该得到以下内容:  العمرهوالشيءالوحيدالذيكلمازاد نقص。

    任何帮助都将受到赞赏,因为我尝试了很多可能性,但所有这些都没有用。

2 个答案:

答案 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

在正则表达式中,字符类[...]的交叉点代表&&,因此您可以尝试类似

的内容
  1. "[\\p{P}\\p{Digit}&&[^,.]]"
  2. "[\\P{InArabic}&&[^,.]]"\\P{xxx}否定\\p{xxx},反之亦然)