Java和C#Regex没有产生相同的结果

时间:2016-07-01 18:57:50

标签: java c# regex

我有一个正则表达式的一部分,我试图用它来将句子分成单词。作为其中的一部分,我想分割诸如“单词”之类的模式。变成“单词”,“。”。我通过对标点符号使用正向前瞻和对空格字符使用负向后视来执行此操作。

在Java中,以下代码实现了这一点:

Pattern test = Pattern.compile("(?=[\\p{P}&&[^']])(?<!\\s)");
test.split("word."); // returns ["word", "."]

但是,当我在C#中尝试使用相同的模式时,它不起作用。

Regex.Split("word.", @"(?=[\p{P}&&[^']])(?<!\s)");
// returns ["word."]

为什么C#在这里的行为方式不一样?

1 个答案:

答案 0 :(得分:8)

&&事件是Java特定的正则表达式语法,在.NET中不起作用。

但是我认为你应该能够在.NET中以更简单的方式重写它,如下所示:

@"(?=[^'\P{P}])(?<!\s)"

它使用\P字符类,它是\p的否定,它被^否定,并以正确的方式结束。