Domanda

Quindi stavo scrivendo un codice oggi che sostanzialmente assomiglia a questo:

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

Che non è proprio carino. Mi chiedevo se c'è una regex o qualcosa che potrei scrivere che sostituisca tutte le chiamate alla funzione Replace()?

È stato utile?

Soluzione

Puoi utilizzare Regex.Replace () . Tutti i caratteri possono essere posizionati tra parentesi quadre, che corrisponde a qualsiasi carattere tra parentesi quadre. Alcuni caratteri speciali devono essere sfuggiti alle barre rovesciate e qui uso una stringa @verbatim, quindi non devo salvarli due volte per il compilatore C #. Il primo parametro è la stringa di input e l'ultimo parametro è la stringa di sostituzione.

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

Altri suggerimenti

Cordiali saluti - se devi modificare questa regex, dovrai avere una comprensione del linguaggio delle espressioni regolari. È abbastanza semplice e come sviluppatore lo devi davvero a te stesso per aggiungere espressioni regolari alla tua cassetta degli attrezzi - non ne hai bisogno ogni giorno, ma essere in grado di applicarle in modo appropriato dove necessario quando sorge la necessità ti ripagherà dieci volte per lo sforzo iniziale. Ecco un link a un sito Web con alcuni tutorial di alto livello, facili da seguire tutorial e materiale di riferimento su espressioni regolari: regular- expressions.info . Una volta che hai un'idea delle espressioni regolari e vuoi usarle nel tuo software, ti consigliamo di acquistare Regex Buddy. È uno strumento economico e straordinario per l'apprendimento e l'uso delle espressioni regolari. molto raramente acquisto strumenti di sviluppo, ma questo valeva ogni centesimo. È qui: Regex Buddy

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

Sarebbe la regex per questo ... in c # dovresti essere in grado di usare

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

Anche se il mio C # è arrugginito ..

Se non ti interessa approfondire Regex, ecco un paio di altre possibilità del metodo di estensione.

Puoi inserire i caratteri specifici che vuoi sostituire:

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();
}

O se sai di voler mantenere o eliminare solo determinati tipi di caratteri, puoi utilizzare i vari metodi in char, come IsLetter, IsDigit, IsPunctuation e 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();
}

Ecco come useresti ciascuna di queste possibilità:

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

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

Forse puoi ridurlo a un paio di righe, se lo desideri, usando un'espressione Lambda e 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  "
        }
    }

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top