如何在\ p {S}中添加否定

时间:2013-01-29 17:46:01

标签: java regex regex-negation

有人向我提供了一个很棒的解决方案,其中包含\p{S}来匹配正则表达式中的任何符号。问题是我需要从\p{S}中删除两个符号。我不希望&'成为匹配。

我想也许\p{S^&^'}会起作用,但事实并非如此。我看过网上但我不确定要搜索什么。

请帮忙。

\b\p{L}*[\p{S}\p{P}]((\p{L}[\p{P}\p{S}])|([\p{P}\p{S}]\p{L})|(\p{L}))+\b

另一个解决方案是\b([a-zA-Z]+(?:[^\w\s^'&]|_)[a-zA-Z]*)|[a-zA-Z]*(?:[^\w\s^'&]|_)[a-zA-Z]+\b,但它捕获以标点符号结尾的单词。如果它不这样做也会起作用。

2 个答案:

答案 0 :(得分:1)

使用character class subtraction(如果有):

[\p{S}-[&']]

如果不可用,请使用lookahead

(?!.?[&'])\p{S}

答案 1 :(得分:0)

您可以使用负面预测(?!.*[&']),即

\b(?!.*[&'])\p{L}*[\p{S}\p{P}]((\p{L}[\p{P}\p{S}])|([\p{P}\p{S}]\p{L})|(\p{L}))+\b