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

bob*_*sox 1 c# java regex

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

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

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

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

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

为什么C#在这里表现不一样?

Mat*_*nen 8

&&是Java特定的正则表达式语法,不适用于.NET.

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

@"(?=[^'\P{P}])(?<!\s)"
Run Code Online (Sandbox Code Playgroud)

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

  • 写它的另一种方法是`(?= [\ p {P} - [']])`(只是外观部分) (3认同)