Clojure 克罗朱尔。使用正则表达式替换具有相同字符数的子字符串

Clojure 克罗朱尔。使用正则表达式替换具有相同字符数的子字符串,clojure,clojurescript,Clojure,Clojurescript,当子字符串被星号包围时,我需要将其字符替换为空格: (def my-line "Lorem ipsum dolor, *consetetur*, invidunt ut *labore et dolore magna aliquyam* erat") (clojure.string/replace my-line #"\*(.*?)\*" " ") 但是我的代码是哑的,设置了一个静态的空格数,我需要的是用空格替换相同数量的字符: consetetur = 9 spaces labore

当子字符串被星号包围时,我需要将其字符替换为空格:

(def my-line "Lorem ipsum dolor, *consetetur*, invidunt ut *labore et dolore magna aliquyam* erat")

(clojure.string/replace my-line #"\*(.*?)\*" "    ")
但是我的代码是哑的,设置了一个静态的空格数,我需要的是用空格替换相同数量的字符:

consetetur = 9 spaces
labore et dolore magna aliquyam = 31 

解决方案。

如andy_fingerhut所述,当正则表达式捕捉到多组字符时,将创建并传递一个向量:

 (clojure.string/replace my-line #"\*(.*?)\*" #(.toUpperCase (%1 1)))
=> "Lorem ipsum dolor sit amet, CONSETETUR, tempor invidunt ut LABORE ET DOLORE MAGNA ALIQUYAM erat, sed diam"
就我而言:

(clojure.string/replace my-line #"\*(.*?)\*" 
       #(clojure.string/join (take (count (% 1)) (repeat " "))))
=> "Lorem ipsum dolor sit amet,           , tempor invidunt ut                                 erat, sed diam"

解决方案。

如andy_fingerhut所述,当正则表达式捕捉到多组字符时,将创建并传递一个向量:

 (clojure.string/replace my-line #"\*(.*?)\*" #(.toUpperCase (%1 1)))
=> "Lorem ipsum dolor sit amet, CONSETETUR, tempor invidunt ut LABORE ET DOLORE MAGNA ALIQUYAM erat, sed diam"
就我而言:

(clojure.string/replace my-line #"\*(.*?)\*" 
       #(clojure.string/join (take (count (% 1)) (repeat " "))))
=> "Lorem ipsum dolor sit amet,           , tempor invidunt ut                                 erat, sed diam"

你不能用正则表达式这样做。您需要检查匹配项并“手动”创建包含空格的字符串。
clojure.string/replace
允许最后一个参数成为您编写的函数,该函数获取有关匹配项的信息,并计算作为替换项的返回值。e、 g.
(clojure.string/replace my line#“\*(.*?)*”(fn[match info](str(count(match info 1щщ))=>“Lorem ipsum dolor,10,invidunt ut 31 erat”
我想如果你给出一个你期望的完整输出的例子,你的要求会更清楚,例如“Lorem ipsum dolor,10,invidunt ut 31 erat”“正则表达式不能这样做。您需要检查匹配项并“手动”创建包含空格的字符串。
clojure.string/replace
允许最后一个参数成为您编写的函数,该函数获取有关匹配项的信息,并计算作为替换项的返回值。e、 g.
(clojure.string/replace my line#“\*(.*?)*”(fn[match info](str(count(match info 1‘‘‘‘‘‘))=>“Lorem ipsum dolor,10,invidunt ut 31 erat”
我想如果你给出一个你期望的完整输出的例子,你的要求会更清楚,例如“Lorem ipsum dolor,10,invidunt ut 31 erat”