3

だから私はこれに少し苦労しています。どこかから文字列を引っ張っているときは、すべての文字の間にスペースを追加することにしました。

次の正規表現が必要です。

  • スペースのない単一のスペースを置き換える
  • トリプルスペースを1スペースに置き換えます(追加されたスペースに" "変わるため)。"   "

誰かがこの正規表現を手伝ってもらえますか?単一/複数のスペースに対してこれを行う方法は知っていますが、x個のスペースを1つのスペースに変換することはできません。

4

4 に答える 4

4

少し注意が必要ですが、ここに単一の正規表現ソリューションがあります。

// becomes "test string"
"t e s t   s t r i n g".replaceAll("( )  | ", "$1");

例: http: //ideone.com/O6DSk

これが機能するのは、トリプルスペースが一致した場合、スペースの1つがキャプチャグループ1に保存されますが、シングルスペースが一致した場合、キャプチャグループ1は空になるためです。一致をグループのコンテンツに置き換えると、3つのスペースが1つになり、1つのスペースが削除されます。

于 2012-10-11T17:23:42.267 に答える
3
s = s.replaceAll("\\s{3}", " ");  // Replace 3 spaces with one.

私はあなたが理解していることを知っていると思います、スペースなしで単一のスペースを置き換えます。

  • {n}nスペースと完全に一致します。
  • {0,n}0からn個のスペースに一致します。
  • {4,}4つ以上のスペースに一致します。

single spaceスペースなしと1スペースの両方を置き換えるに3 spacesは、以下の正規表現を使用できます。

s = "He llo   World";
s = s.replaceAll("(\\S)\\s{1}(\\S)", "$1$2").replaceAll("\\s{3}", " ");

System.out.println(s);

Ouput:-

Hello World

ここで注文が重要です。なぜなら、2番目の正規表現で3 spacesに変換されます。single space最初のものの前に使用すると、最終的にはに置き換えられno-spaceます。

(\\S)\\s{1}(\\S)->\\Sは、単一のスペースのみが置き換えられるようにするためのものです。\\S非スペース文字を表します。お持ちでない場合は、すべてのスペース文字がスペースなしに置き換えられます。

于 2012-10-11T17:17:28.317 に答える
0

スペースのない単一のスペースを置き換えます。トリプルスペースを1つのスペースに置き換えます。

それは正規表現の仕事ではありません。

結局のところ、正規表現の仕事です

input.replaceAll("(?<=\S) (?=\S)", "").replaceAll(" {3,}", " ");

最初の正規表現は、前に非スペース(look-behind、(?<=\S))が続き、その後に非スペース(look-ahead (?=\S))が続くすべての単一スペースを置き換えます。

他の正規表現は、残りのトリプルスペース(またはそれ以上)を処理します。

于 2012-10-11T17:16:38.773 に答える
0

replaceAll()以下のような回避策を使用して、希望の組み合わせで簡単に使用できると思います。

//locate 3 spaces and mark them using some special chars
myString = myString.replaceAll("   ", "@@@"); //use some special combination

//replace single spaces with no spaces
myString = myString.replaceAll(" ", "");

//now replace marked 3 spaces with one space
myString = myString.replaceAll("@@@", " "); //use the same special combination
于 2012-10-11T17:16:41.973 に答える