gpt4 book ai didi

string - 在 Clojure 中修剪不可打印字符的一般方法

转载 作者:行者123 更新时间:2023-12-03 14:22:18 33 4
gpt4 key购买 nike

我遇到了一个错误,我无法将两个看似“相同”的字符串匹配在一起。例如,以下两个字符串匹配失败:
“ sample ”和“ sample ”。
要复制该问题,可以在 Clojure 中运行以下命令。

(= "sample" "​sample") ; returns false
经过一个小时的沮丧调试,我发现有一个 零宽度空间在第二个字符串的前面!通过退格从这个特定的例子中删除它是微不足道的。但是,我有一个匹配的字符串数据库,似乎有多个字符串面临这个问题。我的问题是: 在 Clojure 中是否有修剪零宽度空格的通用方法?
我试过的一些方法:
(count (clojure.string/trim "​abc")) ; returns 4
(count (clojure.string/replace "​abc" #"\s" "")) ; returns 4
本帖 Remove zero-width space characters from a JavaScript string确实提供了在此示例中有效的正则表达式解决方案,即
(count (clojure.string/replace "​abc" #"[\u200B-\u200D\uFEFF]" "")) ; returns 3
但是,正如帖子本身所述,还有许多其他潜在的 ascii 字符可能是不可见的。所以我仍然很感兴趣,如果有一种更通用的方法不依赖于列出所有可能的不可见 unicode 符号。

最佳答案

我相信,您所指的是所谓的不可打印字符。基于 this answer在 Java 中,你可以通过 #"\p{C}"正则表达式作为模式到 replace :

(defn remove-non-printable-characters [x]
(clojure.string/replace x #"\p{C}" ""))
但是,这将删除换行符,例如 \n .所以为了保留这些字符,我们需要一个更复杂的正则表达式:
(defn remove-non-printable-characters [x]
(clojure.string/replace x #"[\p{C}&&^(\S)]" ""))
此功能将删除不可打印的字符。让我们测试一下:
(= "sample" "​sample")
;; => false

(= (remove-non-printable-characters "sample")
(remove-non-printable-characters "​sample"))
;; => true

(remove-non-printable-characters "sam\nple")
;; => "sam\nple"
\p{C}讨论模式 here .

关于string - 在 Clojure 中修剪不可打印字符的一般方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62913763/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com