我正在尝试使用正则表达式的一部分将句子分解为单词。作为其中的一部分,我想拆分诸如“单词”之类的模式。变成“单词”,“。”。我通过对标点符号使用正向前瞻,对空格字符使用负向后瞻来做到这一点。

在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的取反,被^取反并以正确的方式结束。

关于java - Java和C#正则表达式无法产生相同的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38152292/

10-12 12:36
查看更多