/ / c # regex split ignorando caratteri come "=" "-" - c #, regex, split

c # regex split ignorando caratteri come "=" "-" - c #, regex, split

Il mio codice è

string sentence = ".a -w =e ?a";
string[] words = Regex.Split(sentence, @"(?![-/.:~+=!>?])W+");
foreach (string word in words)
{
Console.WriteLine(word);
}

uscite .a w e a ma voglio che venga emesso .a -w =e ?a

Sono un po 'incapace di programmare così ogni aiuto sarebbe molto apprezzato.

risposte:

0 per risposta № 1

La modifica del codice come di seguito restituirebbe il risultato desiderato. Il Split() il metodo dividerà la stringa in base all'input e restituirà un array. La divisione regex sarebbe meglio per i requisiti di divisione più complessi.

string sentence = ".a -w =e ?a";
string[] words = sentence.Split(" ");
foreach (string word in words)
{
Console.WriteLine(word);
}

0 per risposta № 2

Supponendo che tu voglia l'output: a, w, e, a:

string sentence = ".a -w =e ?a";
string[] words = Regex.Split(sentence, @"[W_]+");
foreach (string word in words)
{
Console.WriteLine(word);
}

Questo si divide su tutto ciò che non è una lettera o un numero.

Spiegazione

  • W = non una lettera, un numero o un trattino basso (vedi http://regexlib.com/CheatSheet.aspx?AspxAutoDetectCookieSupport=1)
  • _ = dato che vogliamo solo lettere o numeri nelle nostre parole, includo anche il trattino basso come carattere da dividere
  • [...] - questo dice di dividere su entrambi W o _; al contrario di W immediatamente seguito da _.
  • + - questo dice se ci sono più caratteri suddivisi sequenzialmente per trattarli come 1; cioè a - b risultati in a,b piuttosto che a,,,b.

0 per risposta № 3

Non hai bisogno di usare Split ma può semplicemente abbinare qualsiasi cosa che non sia uno spazio.

Regex.Matches(".a -w =e ?a", @"[^s]+")
.OfType<Match>()
.Select(mt => mt.Value)

Restituirà una serie di parole

inserisci la descrizione dell'immagine qui


[^s]+ dice che combacia con questo set [...] che è non ^ Uno spazio s. + uno o più di quei personaggi (caratteri che non sono uno spazio).


Nota che ho scritto un articolo sul blog, quasi dieci anni fa, sulla trappola dell'uso di regex split su più righe e di problemi.

Regex divide le insidie ​​su più linee