1

テキストを文に分割したい。私のテキストに\nは間に文字が含まれています。\n.(ドット)で分割したい。スペースの後にピリオドが続くため、分割条件として使用できませんBreakIterator(分割したいテキストでは、それは必要ありません)。

i am a java programmer.i like coding in java. pi is 3.14\n regex not working

出力する必要があります:

['i am a java programmer', 'i like coding in java', 'pi is 3.14', 'regex not working']

\nまたはで分割する単純な正規表現を試しました.

[\\\\n\\.]

これは機能しませんが、個別に指定すると機能します。

\\\\n
\\.

それで、誰でもまたはで分割される正規表現を与えることができます\n.

別の問題は、 5.6のような小数の場合に分割を行いたくないことです。

4

3 に答える 3

9

このJava正規表現はそれを行う必要があります:

"\n|((?<!\\d)\\.(?!\\d))"

ここでのポイント:

  • 逃げる必要はありませ\n
  • ドットの周りの奇妙に見えるものは否定的なルックアラウンドであり、「前/次の文字は数字であってはならない」ことを意味します

この正規表現は、「改行、または数字が前後にないリテラルドットのいずれか


参考までに、括弧自体を除いて、文字クラス ([] の間) 内の文字をエスケープする必要はありません。

于 2013-02-18T11:32:53.427 に答える
2

またはstring.split("[\n.]")で分割するために使用します\n.

文字クラス内で.は、特別な意味はありません。だから逃げる必要はない.

編集: string.split("\n|[.](?<!\\d)(?!\\d)") 10 進数の分割を回避します。

ここで.は、両側に数字があるかどうかを確認するために、それぞれの後読みと先読みがあります。両方とも数値でない場合、分割が適用されます。

\n|\\.(?!\\d)|(?<!\\d)\\..両側に数字がある場合の分割を回避します。

\n|(?<!\\d)[.](?!\\d)いずれかの辺に数字がある場合、分割を回避します

だからあなたが必要とするのは

string.split("\n|\\.(?!\\d)|(?<!\\d)\\.")

分割するsomething.4が分割しない3.14

于 2013-02-18T11:31:48.863 に答える
0

[]ブロック内の Java 正規表現で二重エスケープする必要はありません。

[.\n]

動作するはずです。

于 2013-02-18T11:33:40.650 に答える