文章に文を分割しますが、C#の句読点に問題があります
質問
いくつかの同様の質問を見ましたが、これを達成しようとしています。
文字列が与えられると、str = "月は私たちの自然な衛星です。つまり、地球の周りを回転します!」単語を抽出し、配列に保存したいと思います。予想される配列要素はこれでしょう。
the
moon
is
our
natural
satellite
i.e.
it
rotates
around
the
earth
string.split( '、' t '、' r ')を使用してみましたが、これは正しく機能しません。また、。などを削除しようとしましたが、「IE」のような文字列も解析する必要があります。これを達成するための最良の方法は何ですか?また、regex.splitを使用して使用してみました。
string[] words = Regex.Split(line, @"\W+");
確かに正しい方向のいくつかの微調整に感謝します。
解決
正規表現ソリューション。
(\b[^\s]+\b)
そしてもしあなたが 本当 最後に修正したい .
の上 i.e.
これを使用できます。
((\b[^\s]+\b)((?<=\.\w).)?)
これが私が使用しているコードです。
var input = "The moon is our natural satellite, i.e. it rotates around the Earth!";
var matches = Regex.Matches(input, @"((\b[^\s]+\b)((?<=\.\w).)?)");
foreach(var match in matches)
{
Console.WriteLine(match);
}
結果:
The moon is our natural satellite i.e. it rotates around the Earth
他のヒント
あなたが探している解決策はあなたが思っているよりもはるかに複雑だと思います。何らかの形の実際の言語分析、または少なくとも辞書を探しているので、期間が単語の一部であるか、文を終了するかを判断できます。あなたはそれが両方をするかもしれないという事実を考えましたか?
「句読点を含む単語」の辞書を追加することを検討してください。これは、問題を解決するための最も簡単な方法かもしれません。
これは私のために働きます。
var str="The moon is our natural satellite, i.e. it rotates around the Earth!";
var a = str.Split(new char[] {' ', '\t'});
for (int i=0; i < a.Length; i++)
{
Console.WriteLine(" -{0}", a[i]);
}
結果:
-The
-moon
-is
-our
-natural
-satellite,
-i.e.
-it
-rotates
-around
-the
-Earth!
結果の後処理、コンマやセミコロンなどを削除することができます。
Regex.Matches(input, @"\b\w+\b").OfType<Match>().Select(m => m.Value)
所属していません StackOverflow