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的正则表达式语法,在.NET中不起作用。
但是,我认为您应该能够在 .NET 中以更简单的方式重写它,如下所示:
@"(?=[^''P{P}])(?<!'s)"
它使用'P
字符类,即'p
的否定,它被^
否定并最终以正确的方式结束。