我有一个字符串和字符串末尾的一些模式。我如何准确地删除单词末尾的这个模式,但即使它存在于开头或中间,也不会有更多的东西。例如,字符串为
PatternThenSomethingIsGoingOnHereAndLastPattern我需要去掉结尾处的"Pattern“,这样结果就是
PatternThenSomethingIsGoingOnHereAndLast我该怎么做呢?
发布于 2012-12-04 23:02:09
您的问题没有指定模式必须是正则表达式还是普通字符串。在后一种情况下,您可以使用简单的方法:
(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。
发布于 2012-12-04 23:03:10
您可以使用replaceAll
模式模式(.replaceAll "PatternThenSomethingIsGoingOnHereAndLastPattern“”
=> $“)
"PatternThenSomethingIsGoingOnHereAndLast“
替换模式(clojure.string/
"PatternThenSomethingIsGoingOnHereAndLastPattern“#”$ "") =>
发布于 2012-12-04 23:04:53
你需要的一切我都相信
(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)))) ;phabhttps://stackoverflow.com/questions/13705677
复制相似问题