سؤال

لذلك كنت أكتب بعض التعليمات البرمجية اليوم والتي تبدو بشكل أساسي كما يلي:

string returnString = s.Replace("!", " ")
            .Replace("@", " ")
            .Replace("#", " ")
            .Replace("$", " ")
            .Replace("%", " ")
            .Replace("^", " ")
            .Replace("*", " ")
            .Replace("_", " ")
            .Replace("+", " ")
            .Replace("=", " ")
            .Replace("\", " ")

وهو ليس لطيفًا حقًا.كنت أتساءل عما إذا كان هناك تعبير عادي أو شيء يمكنني كتابته من شأنه أن يحل محل جميع المكالمات إلى Replace() وظيفة؟

هل كانت مفيدة؟

المحلول

يمكنك استخدام التعبير العادي.استبدال ().يمكن وضع كافة الأحرف بين قوسين مربعين، وهو ما يطابق أي حرف بين قوسين مربعين.يجب أن يتم الهروب من بعض الأحرف الخاصة باستخدام خطوط مائلة عكسية، وأنا أستخدم سلسلة @verbatim هنا، لذلك لا يتعين علي الهروب منها مرتين لمترجم C#.المعلمة الأولى هي سلسلة الإدخال والمعلمة الأخيرة هي سلسلة الاستبدال.

var returnString = Regex.Replace(s,@"[!@#\$%\^*_\+=\\]"," ");

نصائح أخرى

لمعلوماتك - إذا كنت بحاجة إلى تعديل هذا التعبير العادي، فستحتاج إلى فهم لغة التعبير العادي.الأمر بسيط للغاية، وباعتبارك مطورًا، فإنك مدين لنفسك حقًا بإضافة تعبيرات عادية إلى صندوق الأدوات الخاص بك - فأنت لا تحتاج إليها كل يوم، ولكن القدرة على تطبيقها بشكل مناسب حيثما كان ذلك ضروريًا عند الحاجة إليها سيعوضك عشرة أضعاف الجهد الأولي.فيما يلي رابط لموقع ويب يحتوي على بعض البرامج التعليمية عالية الجودة وسهلة المتابعة والمواد المرجعية حول التعبيرات العادية: معلومات التعبيرات العادية.بمجرد أن تعتاد على التعبيرات العادية وترغب في استخدامها في برنامجك، ستحتاج إلى شراء Regex Buddy.إنها أداة رخيصة وغير عادية للتعلم واستخدام التعبيرات العادية.أنا جداً نادرًا ما أشتري أدوات التطوير، لكن هذه الأداة كانت تستحق كل قرش.إنه هنا: ريجكس الأصدقاء

s/[!@#$%^*_+=\]/ /

هل سيكون التعبير العادي لذلك ...في C# يجب أن تكون قادرًا على استخدامه

Regex.Replace(yourstring, "[!@#$%^*_+=\]", "" ); 

على الرغم من أن C # الخاص بي صدئ ..

إذا كنت لا تهتم بالتعمق في Regex، فإليك بعض الاحتمالات الأخرى لطريقة التمديد.

يمكنك تمرير الأحرف المحددة التي تريد استبدالها:

static public string ReplaceCharsWithSpace(this string original, string chars)
{
    var result = new StringBuilder();
    foreach (var ch in original)
    {
        result.Append(chars.Contains(ch) ? ' ' : ch);
    }
    return result.ToString();
}

أو إذا كنت تعلم أنك تريد الاحتفاظ بأنواع معينة من الأحرف أو إزالتها فقط، فيمكنك استخدام الطرق المختلفة الموجودة في هذا المقال char, ، مثل IsLetter, IsDigit, IsPunctuation, ، و IsSymbol:

static public string ReplaceNonLetterCharsWithSpace(this string original)
{
    var result = new StringBuilder();
    foreach (var ch in original)
    {
        result.Append(char.IsLetter(ch) ? ch : ' ');
    }
    return result.ToString();
}

إليك كيفية استخدام كل من هذه الاحتمالات:

string s = "ab!2c";
s = s.ReplaceCharsWithSpace(@"!@#$%^*_+=/");  // s contains "ab  c"

string t = "ab3*c";
t = t.ReplaceNonLetterCharsWithSpace();  // t contains "ab  c"

ربما يمكنك تقليل ذلك إلى سطرين، إذا رغبت في ذلك، باستخدام تعبير Lambda و List<>, ForEach

using System.Collections.Generic;

namespace ReplaceWithSpace 
 {
    class Program 
    {
        static void Main(string[] args) 
        {
            string someString = "#1, 1+1=2 $string$!";

            var charsToRemove = new List<char>(@"!@#$%^*_+=\");
            charsToRemove.ForEach(c => someString = someString.Replace(c, ' '));

            System.Diagnostics.Debug.Print(someString); //" 1, 1 1 2  string  "
        }
    }

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top