c# فقط - كيف أقوم بإزالة كافة الأحرف غير الأبجدية الرقمية من سلسلة ما عدا الشرطة؟



العربية الابجدية (10)

لقد قمت بعمل حل مختلف ، من خلال القضاء على أحرف التحكم ، والتي كانت مشكلتي الأصلية.

إنه أفضل من وضع قائمة بكل الحروف "الخاصة لكن الجيدة"

char[] arr = str.Where(c => !char.IsControl(c)).ToArray();    
str = new string(arr);

إنه أبسط ، لذلك أعتقد أنه أفضل!

كيف يمكنني إزالة جميع الأحرف غير الأبجدية الرقمية من سلسلة ما باستثناء أحرف الشرطة والمسافات؟


استناداً إلى الإجابة عن هذا السؤال ، قمت بإنشاء فئة ثابتة وإضافة هذه. أعتقد أنه قد يكون مفيدا لبعض الناس.

public static class RegexConvert
{
    public static string ToAlphaNumericOnly(this string input)
    {
        Regex rgx = new Regex("[^a-zA-Z0-9]");
        return rgx.Replace(input, "");
    }

    public static string ToAlphaOnly(this string input)
    {
        Regex rgx = new Regex("[^a-zA-Z]");
        return rgx.Replace(input, "");
    }

    public static string ToNumericOnly(this string input)
    {
        Regex rgx = new Regex("[^0-9]");
        return rgx.Replace(input, "");
    }
}

ثم يمكن استخدام الطرق على النحو التالي:

string example = "[email protected]#$";
string alphanumeric = example.ToAlphaNumericOnly();
string alpha = example.ToAlphaOnly();
string numeric = example.ToNumericOnly();

استبدل [^a-zA-Z0-9 -] بسلسلة فارغة.

Regex rgx = new Regex("[^a-zA-Z0-9 -]");
str = rgx.Replace(str, "");

يكون regex [^\w\s\-]* :

\s أفضل لاستخدامه بدلاً من الفضاء ( ) ، لأنه قد تكون هناك علامة تبويب في النص.


تريد شيء سريع؟

public static class StringExtensions 
{
    public static string ToAlphaNumeric(this string self, params char[] allowedCharacters)
    {
        return new string(Array.FindAll(self.ToCharArray(), c => char.IsLetterOrDigit(c) || allowedCharacters.Contains(c)));
    }
}

سيسمح لك ذلك بتحديد الحروف التي تريد السماح بها أيضًا.


باستخدام System.Linq

string withOutSpecialCharacters = new string(stringWithSpecialCharacters.Where(c =>char.IsLetterOrDigit(c) || char.IsWhiteSpace(c) || c == '-').ToArray());

يمكنك المحاولة:

   string s1= Regex.Replace(s,"[^A-Za-z0-9 _]","");

حيث s هو السلسلة الخاصة بك.


أستخدم شكلاً من إجابة واحدة من الإجابات هنا. أريد استبدال المساحات بـ "-" بحيث يكون محرك البحث المخصص التابع لشركة SEO ودائمًا أيضًا. أيضا لا مرجع system.web من طبقة خدماتي.

private string MakeUrlString(string input)
{
    var array = input.ToCharArray();

    array = Array.FindAll<char>(array, c => char.IsLetterOrDigit(c) || char.IsWhiteSpace(c) || c == '-');

    var newString = new string(array).Replace(" ", "-").ToLower();
    return newString;
}

كان بإمكاني استخدام RegEx ، يمكنهم توفير حل أنيق ولكن يمكن أن يسبب مشاكل في الأداء. هنا حل واحد

char[] arr = str.ToCharArray();

arr = Array.FindAll<char>(arr, (c => (char.IsLetterOrDigit(c) 
                                  || char.IsWhiteSpace(c) 
                                  || c == '-')));
str = new string(arr);

عند استخدام الإطار المضغوط (الذي لا يحتوي على FindAll)

استبدل FindAll بـ 1

char[] arr = str.Where(c => (char.IsLetterOrDigit(c) || 
                             char.IsWhiteSpace(c) || 
                             c == '-')).ToArray(); 

str = new string(arr);

1 تعليق من قبل ShawnFeatherly


I know this one is not the best way. But you can try this.

string str = Path.GetRandomFileName(); //This method returns a random file name of 11 characters
str = str.Replace(".","");
Console.WriteLine("Random string: " + str);




c# regex