Ta bort tecken som matchar ett mönster

Clojure:
Ta bort tecken som matchar ett mönster

How to:

Clojure ger oss clojure.string/replace för att hantera teckentvätt. Kolla här:

(require '[clojure.string :as str])

;; Ta bort alla siffror från en sträng.
(println (str/replace "Del4eta 42 non-num8ers!" #"\d" ""))
;; Output: "Deleta non-numers!"

;; Ta bort specialtecken, behåll bara bokstäver och siffror.
(println (str/replace "Hej! Är allt bra? 100% klart." #"[^\w\s]" ""))
;; Output: "Hej Är allt bra 100 klart"

Deep Dive:

Funktionen clojure.string/replace finns i Clojure sedan de tidiga versionerna. Det är en Swig-hänskjuten metod som är både kraftfull och mångsidig. Även om replace är enkel att använda, har den två viktiga alternativ: Du kan skicka in ett enkelt strängmönster eller använda en java.util.regex.Pattern för mer komplexa ersättningsregler.

Implementationsmässigt utför replace sin magi genom att loopa över strängen och tillämpa mönstret du har specifierat. Detta görs effektivt och utan onödig belastning på systemet.

Alternativ till str/replace inkluderar att använda re-seq för att hitta alla förekomster som inte matchar mönstret och sedan bygga en ny sträng från dessa, men detta är vanligtvis mer kod och mindre rakt på sak.

See Also: