Java 和 C# 正则表达式不会产生相同的结果

本文关键字:结果 正则表达式 Java | 更新日期: 2023-09-27 17:54:27

我有一个正则表达式的一部分,我试图用它来将句子分成单词。作为其中的一部分,我想将诸如"单词"之类的模式拆分为"单词","."。为此,我对标点符号使用正面前瞻,对空格字符使用负面后视。

在 Java 中,以下代码完成此操作:

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

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

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

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

Java 和 C# 正则表达式不会产生相同的结果

&&的事情

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

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

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

它使用'P字符类,即'p的否定,它被^否定并最终以正确的方式结束。