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 № 1La 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 entrambiW
o_
; al contrario diW
immediatamente seguito da_
.+
- questo dice se ci sono più caratteri suddivisi sequenzialmente per trattarli come 1; cioèa - b
risultati ina
,b
piuttosto chea
,,,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
[^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