似たような質問がたくさんありますが、すべて読んだと言えます。しかし、私は正規表現が苦手で、必要な正規表現を理解できませんでした。
Java で文字列を分割したいのですが、4 つの制約があります。
- 区切り文字は [.?!] (文末)
- 10 進数はトークン化しないでください
- 区切り文字は削除しないでください。
- 各トークンの最小サイズは 5 にする必要があります
たとえば、入力の場合:
"Hello World! This answer worth $1.45 in U.S. dollar. Thank you."
出力は次のようになります。
[Hello World!, This answer worth $1.45 in U.S. dollar., Thank you.]
今まで、この正規表現によって 3 つの最初の制約に対する答えを得ました。
text.split("(?<=[.!?])(?<!\\d)(?!\\d)");
そして{5,}
、正規表現のどこかで使用する必要があることはわかっていますが、試した組み合わせは機能しません。
次のような場合:別の文として"I love U.S. How about you?"
トークン化されない限り、1 つまたは 2 つの文が得られても問題ありませんS.
。
最後に、正規表現の優れたチュートリアルを紹介していただければ幸いです。
更新: Chrisがコメントで述べたよう に、正規表現を使用して (自然言語で発生するすべてのケースをカバーするために) このような質問を解決することはほとんど不可能です。ただし、HamZa の回答はクローゼットであり、最も有用なものであることがわかりました。
ので注意してください!受け入れられた回答は、考えられるすべてのユースケースをカバーするわけではありません!