【发布时间】:2016-11-04 06:31:37
【问题描述】:
我尝试使用正则表达式的一部分将句子拆分为单词。作为其中的一部分,我想拆分诸如“单词”之类的模式。变成“单词”、“.”。为此,我对标点符号使用正向前瞻,对空格字符使用负向前瞻。
在 Java 中,以下代码实现了这一点:
Pattern test = Pattern.compile("(?=[\\p{P}&&[^']])(?<!\\s)");
test.split("word."); // returns ["word", "."]
但是,当我在 C# 中尝试使用相同的模式时,它不起作用。
Regex.Split("word.", @"(?=[\p{P}&&[^']])(?<!\s)");
// returns ["word."]
为什么 C# 在这里的行为方式不同?
【问题讨论】:
-
您为什么希望它的行为方式相同?
-
Java实现一定是错的。
-
@ScottHannen:这只是正则表达式的不同风格。
-
对。我希望 Java 和 C# 正则表达式相似,但并非在所有情况下都完全相同。在这种情况下,我不能轻易找到它们不同的原因,所以我问了。
-
@Matti:我知道,我只是在说些蠢话。