首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clojure删除字符串中模式的最后一个入口

问clojure删除字符串中模式的最后一个入口
EN

Stack Overflow用户
提问于 2012-12-04 22:55:18
回答 3查看 4K关注 0票数 4

我有一个字符串和字符串末尾的一些模式。我如何准确地删除单词末尾的这个模式,但即使它存在于开头或中间,也不会有更多的东西。例如,字符串为

代码语言:javascript
复制
PatternThenSomethingIsGoingOnHereAndLastPattern

我需要去掉结尾处的"Pattern“,这样结果就是

代码语言:javascript
复制
PatternThenSomethingIsGoingOnHereAndLast

我该怎么做呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-04 23:02:09

您的问题没有指定模式必须是正则表达式还是普通字符串。在后一种情况下,您可以使用简单的方法:

代码语言:javascript
复制
(defn remove-from-end [s end]
  (if (.endsWith s end)
      (.substring s 0 (- (count s)
                         (count end)))
    s))

(remove-from-end "foo" "bar") => "foo"
(remove-from-end "foobarfoobar" "bar") => "foobarfoo"

有关正则表达式的变体,请参阅answer of Dominic Kexel。

票数 9
EN

Stack Overflow用户

发布于 2012-12-04 23:03:10

您可以使用replaceAll

模式模式(.replaceAll "PatternThenSomethingIsGoingOnHereAndLastPattern“”

=> $“)

"PatternThenSomethingIsGoingOnHereAndLast“

或clojure.string/replace

替换模式(clojure.string/

"PatternThenSomethingIsGoingOnHereAndLastPattern“#”$ "") =>

票数 9
EN

Stack Overflow用户

发布于 2012-12-04 23:04:53

你需要的一切我都相信

代码语言:javascript
复制
(def string "alphabet")
(def n 2)
(def m 4)
(def len (count string))

;starting from n characters in and of m length;
(println
 (subs string n (+ n m)))              ;phab
;starting from n characters in, up to the end of the string;
(println
 (subs string n))                      ;phabet
;whole string minus last character;
(println
 (subs string 0 (dec len)))            ;alphabe
;starting from a known character within the string and of m length;
(let [pos (.indexOf string (int \l))]
  (println
   (subs string pos (+ pos m))))     ;lpha
;starting from a known substring within the string and of m length.
(let [pos (.indexOf string "ph")]
  (println
   (subs string pos (+ pos m))))      ;phab
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13705677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档