10

可能な重複:

C#で複数のスペースを単一のスペースに置き換えるにはどうすればよいですか。

どのように文字列の空白をトリミングするための最もエレガントな方法は何ですか" a<many spaces>b c ""a b c"。そのため、繰り返し空白は1つのスペースに縮小されます。


  • @naveen、あなたがリンクしている質問では、文字列の周囲のスペースを処理できません。 - Lucero
  • @ Lucero:いつもあります.Trim()そのために。 :) - naveen
  • @ naveen、ポイントはそれが違うということです。正規表現とトリムの使い方を知っていれば、質問は必要ではありません。 - Lucero
  • @Luceroまったく違いはありません - Cristian Toma

9 답변


12

あなたが使用することができますRegexこのため:

Regex.Replace(my_string, @"\s+", " ").Trim();


  • それでは、なぜ-1と答えても大丈夫なのでしょうか。簡単に解決できます。 - Cristian Toma
  • @TomaCristian:他にもいくつか正解があるからです。みんながどうやって行って自分のものを編集するのか愚かな…かわいそうなIMO。初めて間違えた場合は削除してください。 - leppie
  • @Lucero:しかし、あなたのRegExとこれを比較すると、単純なTrim()がうまくいかないのだろうか。それから私は読みやすさと保守性のために良い意味です。 - Henk Holterman
  • @leppieこのサイトの主なポイントは他人を助けること、そして自分自身のために評判を上げることです。人々が答えを編集しているのであれば、困っている人を助けることだけです。 ;あなたの問題です! - Cristian Toma
  • @HenkHolterman、一部の正規表現がめちゃくちゃになっていますが、これは正しくありません。ほとんど正規表現の知識がなくても読みやすく理解しやすいものです。また、正規表現は内部で効率的なオートマトンに変換されるため、そのパフォーマンスは「単純な」パフォーマンスと同等になるはずです。スペースを折りたたむための正規表現。また、パフォーマンスをさらに向上させるために正規表現をコンパイルすることもできます。 - Lucero

14

単にテーブルの上に持っているための正規表現なしの解決策:

char[] delimiters = new char[] { ' '};   // or null for 'all whitespace'
string[] parts = txt.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
string result = String.Join(" ", parts);


  • を使用して正規表現ソリューションとは異なり\sこれは空白(U + 0020)文字のみを削除し、他の文字は空白として分類されません。これはQの基準を満たしていますが、実際にはタブなどにも適用する必要があると私は思います。 - Richard
  • @Richard:OPはそれを区切り文字varで微調整できます。そして使うdelimiters = nullに対応\s - Henk Holterman
  • 私はいつも(ここでのこの質問のように)なぜ複雑で比較的高価な文字列操作が簡潔な正規表現より多くの人に好まれるのか疑問に思います。私のモットーは、実行する作業に適したツールを使用することです。regexは、「シンプル」のために設計されたツールです。テキスト正規表現のパターンマッチング。 (ヘンク、誤解しないでください。あなたの答えをまったく批判しているわけではありませんが、正規表現を学び、それらが使用されている場所で使用するために多くの人の嫌悪感を理解していません。 ;「自宅で」 - 正規表現を使用して完全なパーサーや数値バリデータを作成することはしません。上限は明確です)。 - Lucero
  • @ Luceroは全く本当です。人々は正規表現恐怖症か何かを持っている必要があります。 iondenの答えは1行の簡潔な行で、これらの3行の醜い行よりも投票数が少ないです。 - Peter C
  • @ alpha123、またはHenkの半数の支持者を得ているが、意図的に追加していないTrim()しかし、それをすべて行うために正規表現を使用します。 (あまり気にしないで、数時間前の今日の200営業担当者を上限にしました...) - Lucero

8

Regex.Replace(my_string, @"^\s+|\s+$|(\s)\s+", "$1");


  • +1好きですしかし、私のジュニアプログラマーの何人がそれを理解するだろうか。 :) - naveen
  • いくつかの正規表現の基礎を知ることは、特にクライアントサイドのWeb開発者のツールセットの中にもあるので、私の知る限りでは重要なスキルです。それで彼らがそれを理解しないならば、彼らはそれを調べなければなりません...それは正規表現の初心者のために分析するにはあまりにも複雑ではありません。 - Lucero
  • 確かに、それは考え出すことができますが、たとえ正規表現の知識があっても、精神的にパースするのにはある程度の時間がかかります。バージョンの正規表現.Trim()非常に簡潔で、保守が簡単です。 (私は投票していません - このバージョンよろしくタイトなループのように、本当に速いのであれば - Izkata
  • @ downvoter、自分で説明してください! - Lucero

4

使用Trim文字列の最初と最後から空白を削除するメソッドと、複数のスペースを減らすための正規表現

s = Regex.Replace(s.Trim(), @"\s{2,}", " ");


2

あなたはすることができます

Regex.Replace(str, "\\s+", " ").Trim()

http://msdn.microsoft.com/en-us/library/e7f5w83z.aspx


0

        Regex rgx = new Regex("\\s+");
        string str;
        str=Console.ReadLine();
        str=rgx.Replace(str," ");
        str = str.Trim();
        Console.WriteLine(str);


0

正規表現を使う:

"( ){2,}" //Matches any sequence of spaces, with at least 2 of them

そしてそれを使って全てのマッチを ""に置き換えます。

私はC#でそれをしていません、そして、私はドキュメンテーションが何を言うかについて理解するためにより多くの時間を必要とします、それであなたは自分でそれを見つけなければなりません..すみません。


0

正規表現を使う

String test = " a    b c ";
test = Regex.Replace(test,@"\s{2,}"," ");
test = test.Trim();

このコードでは、2つ以上のスペースを1つのスペースに置き換えます。Regexその後、最初と最後に削除します。


  • あなたの正規表現は実際には2つの空白を1つだけに置き換えます。そのはず\s{2,}または\s\s+あるいは\s+任意の数の空白をスペースに置き換えたい場合(\sタブなどの文字を含むすべての空白文字と一致します。結果は異なります。 - Lucero
  • @Luceroあなたは正しいですが、2つのスペースを1つのグループとしてそれぞれ選択するのでうまくいきます。4つの空白がある場合は、グループを置き換える必要があります。 - Amir Ismail
  • 修正は現在機能していますが、2つのグループが出力内の2つのスペースに置き換えられる前です(出力は入力として再処理されません)。 - Lucero

0

Regex.Replace(str, "[\s]+"," ")

次に、Trimを呼び出して、前後の空白を取り除きます。

リンクされた質問


関連する質問

最近の質問