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

Java和C#Regex不产生相同的结果,java,c#,regex,Java,C#,Regex,我有一个正则表达式的一部分,我正试图用它把句子分成单词。作为本文的一部分,我想将诸如“word.”之类的模式拆分为“word”、“.”。为此,我对标点符号使用正向前视,对空格字符使用反向后视 在Java中,以下代码实现了这一点: Pattern test = Pattern.compile("(?=[\\p{P}&&[^']])(?<!\\s)"); test.split("word."); // returns ["word", "."] Pattern test=Pa

我有一个正则表达式的一部分,我正试图用它把句子分成单词。作为本文的一部分,我想将诸如“word.”之类的模式拆分为“word”、“.”。为此,我对标点符号使用正向前视,对空格字符使用反向后视

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

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

Pattern test=Pattern.compile((?=[\\p{p}&&[^']])(?这是Java特有的正则表达式语法,在.NET中不起作用

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

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

@(?=[^'\P{P}])(?

这是Java特有的正则表达式语法,在.NET中不起作用

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

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

(?=[^'\P{P}])(?你为什么期望它以同样的方式运行?Java实现一定是错误的。@ScottHannen:这只是regex的一种不同风格。对。我期望Java和C#regex是相似的,但并非在所有情况下都完全相同。在这种情况下,我不容易找到它们不同的原因,所以我问了。@Matti:我知道,我只是说了一些stupid。你为什么期望它以同样的方式运行?Java实现一定是错误的。@ScottHannen:这只是regex的一种不同风格。对。我期望Java和C#regex是相似的,但并非在所有情况下都完全相同。在这种情况下,我不容易找到它们不同的原因,所以我问了。@Matti:我知道,我只是说了一些不同的东西tupid。另一种编写方法是
(?=[\p{p}-[']])
(只是后面的部分)另一种编写方法是
(?=[\p{p}-[']])
(只是后面的部分)