2015-08-17 7 views
5

Ich möchte nur alphabetische Zeichen aus einer Sammlung herausfiltern. Zum Beispiel möchte ich nur die Zeichen ABcd von "A(B%$c32d". Verwenden Sie nur reguläre Ausdrücke?Filtern alphabetischer Zeichen in Clojure

+3

Regexes sind ziemlich gut Umgang mit Strings . Die ersten zwei Antworten, die ich sehe (mit Filter), liefern alle eine Folge von Zeichen, während (clojure.string/Ersetze "A (B% $ c32d" # "[^ a-zA-Z]" "") einfach a zurückgibt Eine Funktion, die mit Strings umgehen soll, warum magst du es nicht? –

+1

@AssenKolov das ist auch eine nette Lösung, könnte dein Kommentar eine Antwort sein. – nha

+0

@Assen Kolov Danke.Ich war nur neugierig zu sehen, ob es auch gibt eine andere Methode, um diese Art von Filterung ohne Regex zu machen – amirteymuri

Antwort

2

Simplest Implementierung ich denken kann:

(filter (fn [x] (Character/isLetter x)) "abc") 

Es verwendet die Java statische Funktion Character.isLetter.

+0

auch, kann man '' apply str ... 'einfügen, um einen anderen String als endgültigen Wert zurück zu bekommen – lispHK01

-1

Sie haben nicht viel geben, wie eine Eingabezeichenfolge jedoch eine Zeichenfolge Eine Sequenz ist, so dass Sie damit Zeichen herauszufiltern:

EDIT: ASCII Lösung/Refinement

(filter #(<= 65 (int %) 132) "abZ9%xy") ; See NielsK's comment 

Returns eine Lazy-Sequenz von Zeichen.

+0

Down-Stimmen ohne Erklärungen sind nicht hilfreich. –

+0

Danke Frank C Englisch: www.mjfriendship.de/en/index.php?op...39&Itemid=32 Dein Code gibt die Nummern der Alphabete aus, nicht sie selbst. – amirteymuri

+0

Übrigens habe ich keine Down - Stimmen gegeben :-) – amirteymuri

6

In Clojure:

(apply str (filter #(Character/isLetter %) "abc:sQ/SDQ_")) 
;; "abcsQSDQ" 

In Clojure und ClojureScript, eine Regex:

(apply str (re-seq #"[a-zA-Z]" "abc:sQ/SDQ_")) 
+1

Re: regex solution: \ w ist die Zeichengruppe von Wortzeichen, die auch Zahlen und enthält _. 'filter' ändert die Zeichenkette in einen Seq von Zeichen, und Regexes können nicht auf Zeichen angewandt werden, also schlägt es fehl. – NielsK

+0

@NielsK Bearbeitet, vielen Dank. – nha

+1

Es gibt auch' Character/isLetterOrDigit' – BHBH

2

Mit Regex dieses ist eine andere Lösung:

(re-seq #"[a-zA-Z]" "A(B%$c32d") 
Verwandte Themen