4

\t単語間に空白文字( 、\nまたはスペース)の組み合わせが不明な文字列があります。例えば:

string str = "Hello \t\t  \n \t    \t World! \tPlease Help.";

内側の空白文字の各シーケンスを単一のスペースに置き換えたい:

string str = "Hello World! Please Help.";

.NETは、これを行うための組み込みの方法を提供しますか?そうでない場合、C#を介してこれを行うにはどうすればよいですか?

4

7 に答える 7

5
using System.Text.RegularExpressions;

newString = Regex.Replace(oldString, @"\s+", " ");
于 2012-03-03T00:27:55.197 に答える
4

次の正規表現の置き換えを試してください

string original = ...;
string replaced = Regex.Replace(original, @"\s+", " ");

これにより、空白文字(\s)の各グループが単一のスペースに置き換えられます。ここで他の役立つキャラクターグループを見つけることができます

于 2012-03-03T00:25:55.617 に答える
1

文字列のトリミング=Regex.Replace(original、@ "\ s +"、 "");

参照-http ://www.dotnetperls.com/regex-replace-spaces

于 2012-03-03T00:28:12.280 に答える
1

これを実現するための組み込みメソッドはありませんが、正規表現を使用できます。

string result = Regex.Replace(str, @"\s+", " ");
于 2012-03-03T00:31:26.477 に答える
1

私は少し異なるアプローチを使用します。もう少し冗長ですが (現在は VB で)、記号や句読点、カテゴリの組み合わせなど、あらゆる種類の除外を簡単に行うことができます。また、正規表現を学ぶ必要もありません。

Imports System.Runtime.CompilerServices
Imports System.Globalization
Imports System.Text

Public Module StringExclusions

        <Extension()> Public Function CharsToString(ByVal val As IEnumerable(Of Char)) As String
            Dim bldr As New StringBuilder()
            bldr.Append(val.ToArray)
            Return bldr.ToString()
        End Function

        <Extension()> Public Function RemoveCategories(ByVal val As String, ByVal categories As IEnumerable(Of UnicodeCategory)) As String
            Return (From chr As Char In val.ToCharArray Where Not categories.Contains(Char.GetUnicodeCategory(chr))).CharsToString
        End Function

        Public Function WhiteSpaceCategories() As IEnumerable(Of UnicodeCategory)
            Return New List(Of UnicodeCategory) From {UnicodeCategory.SpaceSeparator, UnicodeCategory.LineSeparator, UnicodeCategory.Control}
        End Function
        '...Other commonly used categories removed for brevity.
    End Module

そして、いくつかのテスト。

   [TestMethod]
    public void RemoveCharacters()
    {
        String testObj = "a \a b \b c \f d \n e \r f \t g \v h";
        Assert.AreEqual(@"abcdefgh", testObj.RemoveCategories(Strings.WhiteSpaceCategories()));
    }

    [TestMethod]
    public void KeepValidCharacters()
    {
        String testObj = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`12334567890-=~!@#$%^&*()_+[]\{}|;':,./<>?"  + "\"";
        Assert.AreEqual(@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`12334567890-=~!@#$%^&*()_+[]\{}|;':,./<>?" + "\"", testObj.RemoveCategories(Strings.WhiteSpaceCategories()));
    }
于 2012-03-03T02:38:39.610 に答える
0

正規表現を使用せずに、より高速な代替手段を試すことができます。

string replaced = String.Join(" ", str.Split(
   new char[] { ' ', '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries));
于 2012-03-03T03:18:31.687 に答える