Jak usunąć z łańcucha wszystkie znaki niealfanumeryczne oprócz znaków myślnika i spacji?
606
Zamień [^a-zA-Z0-9 -]
na pusty ciąg.
Regex rgx = new Regex("[^a-zA-Z0-9 -]");
str = rgx.Replace(str, "");
-
musi on znajdować się na końcu klasy postaci lub uciec z odwrotnym ukośnikiem, aby zapobiec użyciu dla zakresu.replaceAll
funkcji zamiastreplace
.return Regex.Replace(str, "[^a-zA-Z0-9_.]+", "", RegexOptions.Compiled);
samo podstawowe pytanie""
istring.Empty
dokładnie tak samo. stackoverflow.com/questions/151472/…Mógłbym użyć RegEx, mogą zapewnić eleganckie rozwiązanie, ale mogą powodować problemy z wydajnością. Oto jedno rozwiązanie
Podczas korzystania z kompaktowego frameworka (który nie ma FindAll)
Zamień FindAll na 1
1 komentarz ShawnFeatherly
źródło
char[] arr = str.Where(c => (char.IsLetterOrDigit(c) || char.IsWhiteSpace(c) || c == '-')).ToArray();
Możesz spróbować:
Gdzie
s
jest twój sznurek?źródło
Korzystanie z System.Linq
źródło
Wyrażenie regularne to
[^\w\s\-]*
:\s
lepiej jest używać zamiast spacji (), ponieważ w tekście może znajdować się tabulator.
źródło
Na podstawie odpowiedzi na to pytanie utworzyłem klasę statyczną i dodałem je. Pomyślałem, że może być przydatny dla niektórych osób.
Następnie metody mogą być użyte jako:
źródło
Chcesz coś szybko?
To pozwoli ci określić, na które znaki chcesz również zezwolić.
źródło
Oto szybkie, przyjazne dla alokacji stosów rozwiązanie, które właśnie tego szukałem.
Niebezpieczna edycja.
I dla tych, którzy nie chcą używać niebezpiecznych lub nie ufają hackowi długości łańcucha.
źródło
Stworzyłem inne rozwiązanie, eliminując Kontrolę postacie , co było moim pierwotnym problemem.
To lepsze niż umieszczanie na liście wszystkich „specjalnych, ale dobrych” znaków
to jest prostsze, więc myślę, że jest lepiej!
źródło
Oto metoda rozszerzenia wykorzystująca odpowiedź @ata jako inspirację.
lub jeśli potrzebujesz dodatkowych znaków innych niż łącznik ...
źródło
Używam tutaj wariantu jednej z odpowiedzi. Chcę zastąpić spacje znakiem „-”, więc jest przyjazny dla SEO, a także tworzy małe litery. Również nie odwołuje się do system.web z mojej warstwy usług.
źródło
Oto bardzo zwięzła wersja
źródło
Jest o wiele łatwiejszy sposób z Regex.
źródło