web-dev-qa-db-ja.com

正規表現を使用してC#文字列からすべての空白を削除します

ハイフンで区切られた姓の文字列を作成しています。時々、そこに空白が入ります。最終結果からすべての空白を削除する必要があります。

動作するサンプル文字列:

アンダーソン-リードスミス

(アンダーソンの後にスペースはありません):

アンダーソン・リード・スミス

姓の文字列は、文字列変数LastNameにあります。

私は正規表現を使用しています:

Regex.Replace(LastName, @"[\s+]", "");

この結果は次のとおりです。

アンダーソン-リードスミス。

私も試しました:

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

そして

Regex.Replace(LastName, @"\s", "");

何が間違っていますか?

38
BattlFrog

RegExの代わりにReplaceを使用して、単純なことを行います。

LastName = LastName.Replace(" ", String.Empty);
124
Gabe

Regex.Replaceは最初の引数を変更しません(.NETでは文字列が不変であることを思い出してください)

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

LastName文字列は変更されません。次のように呼び出す必要があります。

LastName = Regex.Replace(LastName, @"\s+", "");

3つの正規表現はすべて機能していました。ただし、最初の正規表現はすべてのプラス文字も削除しますが、これは意図的ではないと思います。

51
dasblinkenlight

正規表現は必要ありません。これにより、タブや改行なども削除されます

var newstr = String.Join("",str.Where(c=>!char.IsWhiteSpace(c)));

ホワイトスペース文字:0009 , 000a , 000b , 000c , 000d , 0020 , 0085 , 00a0 , 1680 , 180e , 2000 , 2001 , 2002 , 2003 , 2004 , 2005 , 2006 , 2007 , 2008 , 2009 , 200a , 2028 , 2029 , 202f , 205f , 3000

12
I4V

REGEXを使用すると、文字列内のスペースを削除できます。

次の名前空間は必須です。

using System.Text.RegularExpressions;

構文:

Regex.Replace(text, @"\s", "")
1
pramod

これを行う最も高速で一般的な方法(行終端記号、タブも処理されます)。 Regexの強力な機能は、この問題を解決するために実際には必要ありませんが、Regexはパフォーマンスを低下させる可能性があります。

                       new string
                           (stringToRemoveWhiteSpaces
                                .Where
                                (
                                    c => !char.IsWhiteSpace(c)
                                )
                                .ToArray<char>()
                           )

OR

                       new string
                           (stringToReplaceWhiteSpacesWithSpace
                                .Select
                                (
                                    c => char.IsWhiteSpace(c) ? ' ' : c
                                )
                                .ToArray<char>()
                           )
1
CSharpCoder