Come sostituire un carattere nella stringa C # ignorando altri caratteri?
Considera che ho una stringa seguente:
string s = "hello a & b, <hello world >"
Voglio sostituire "&"
(b / wa eb) con"&"
Quindi, se uso
s.replace("&", "&");
Sostituirà anche "&" associato a <
e >
.
C'è un modo per sostituire solo "&" tra a e b?
Risposte
Puoi piuttosto usare HttpUtility.HtmlEncode& HttpUtility.HtmlDecodecome sotto.
Prima decodifica la tua stringa per ottenere una stringa normale, quindi codificala di nuovo che ti darà la stringa prevista.
HttpUtility.HtmlEncode(HttpUtility.HtmlDecode("hello a & b, <hello world >"));
HttpUtility.HtmlDecode("hello a & b, <hello world >")
torneràhello a & b, <hello world >
.HttpUtility.HtmlEncode("hello a & b, <hello world >")
sarà di ritornohello a & b, <hello world >
Potresti usare regex, suppongo:
Regex.Replace("hello a & b, <hello world >", "&(?![a-z]{1,};)", "&");
- & abbina letterale &
- (?!) lookahead negativo (asserisci che quanto segue non corrisponde)
- [az] {1,}; qualsiasi carattere az, una o più volte, seguito da un singolo ";"
Puoi provare ad aggiungere spazi su entrambi i lati del carattere nella stringa di ricerca:
s.replace(" & ", " &");
string s = "hello a & b, <hello world>";
var sd = s.Replace("<", "<").Replace(">", ">");
var e = HttpUtility.HtmlEncode(sd);
WriteLine(e);
produzione:
hello a & b, <hello world>
Penso che la risposta di @ afrischke sia abbastanza buona. Ma potrebbe essere un po 'troppo restrittivo. Nel caso in cui desideri ignorare solo & lt e & gt, puoi utilizzare quanto segue.
Regex.Replace("hello a & b, <hello world >", "&(?!(lt|gt);)", "&");
& (?! (lt | gt);): letterale "&" che non è seguito da "lt;" o "gt;".