2016-07-01 11 views
1

私は、文章を単語に分割するために使用しようとしている正規表現の一部を持っています。その一環として、「単語」などのパターンを分割したいと考えています。 "word"、 "。"に変換します。私は、句読点に肯定的な先読みを使用し、スペース文字に対して負のルックバックを使用してこれを行います。 JavaではJavaとC#Regexが同じ結果を生成しない

、次のコードは、これを実現:

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

私はC#でそれをしようとしたときしかし、同じパターンで、それは動作しません。

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

なぜC#はここでも同じように動作しません。

+1

なぜ同じように動作すると思われますか? –

+0

Javaの実装は間違っていなければなりません。 –

+2

@ScottHannen:それは正規表現のちょっとした風味です。 –

答えて

8

これは&&ですが、Java固有の正規表現の構文であり、.NETでは動作しません。

私はあなたが以下のように.NETで簡単な方法でそれを書き換えることができるはずだと思うしかし:

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

それは、^によって否定ます\pの否定である\P文字クラスを使用しますそして正しい方法で終わる。

+3

これを書く別の方法は '(?= [\ p {P} - [']])'(見た目の部分のみ) –

関連する問題