Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure/Java.regex:为什么re-find会对我的括号中的regex(如下)抛出强制转换异常,而不是对一个简单的表达式,比如\d+&引用;?_Java_Regex_Clojure - Fatal编程技术网

Clojure/Java.regex:为什么re-find会对我的括号中的regex(如下)抛出强制转换异常,而不是对一个简单的表达式,比如\d+&引用;?

Clojure/Java.regex:为什么re-find会对我的括号中的regex(如下)抛出强制转换异常,而不是对一个简单的表达式,比如\d+&引用;?,java,regex,clojure,Java,Regex,Clojure,嗨,我是Clojure新手,对java不是很有经验,我正在努力使用更复杂的正则表达式,代码如下: (defn clean-input [s] (read-string (re-find #"\d+" s))) (defn map-numbers [s] (map clean-input (clojure.string/split s #" "))) (map-numbers "1 2 3/3 4 5") ;=> (1 2

嗨,我是Clojure新手,对java不是很有经验,我正在努力使用更复杂的正则表达式,代码如下:

(defn clean-input [s]
  (read-string (re-find #"\d+" s)))
(defn map-numbers [s]
  (map clean-input (clojure.string/split s #" ")))

(map-numbers "1 2 3/3 4 5")
;=> (1 2 3 4 5)
我想使用一个像下面这样的带分隔符的字符串,删除所有非数字,并将剩余的数字映射到一个延迟序列中,这样我就可以对序列中的每个项进行平方运算,并将结果输出到另一个函数中

"1 2 3.2 4/4 ff 32.12342e+12 red 1.79769313486231570e+308d 0.001 32/3 0xe22A23 9C5.FF3B645A1C16 0556 0xff 0XFF 0x1f 0x223323223 hg 76 ghg6667  2r1111  32r34a32 33r35545 123."
因此,我构建了下面的正则表达式(有点难看),使用regexr.com这样做似乎是正确的。为了可读性,我创建了多行并添加了注释,但在代码中使用时是单行

当我用上面的正则表达式替换“\d+”时,我得到以下强制转换异常:

在clojure.core/read-string(core.clj:3805)处打印返回值(ClassCastException)时出错。 类clojure.lang.Cons不能强制转换为类java.lang.String (clojure.lang.Cons位于加载器“app”的未命名模块中;java.lang.String位于加载器“bootstrap”的模块java.base中)

我试图进一步了解这个问题,但我没有取得任何进展,请有人解释一下我做错了什么,我应该做什么? 非常感谢, 谢谢

(读取字符串(re-seq-re-x))
没有什么意义
re-seq
返回一个序列,
read string
读取一个字符串。这些不匹配,因此无论
re
x
是什么,都会出现预期的错误


令人惊讶的是,您声称您的第一个示例有效。显然不应该,当我将它复制到一个新的repl中时,我发现它确实不起作用。请确保在请求帮助时包含实际失败的代码。如果您编辑它以确保它是最小的(一个好主意!),请确保编辑后错误仍然可以重现。

如果您是指您有一个多行模式,您应该在模式的开头使用
(?x)
,并在所有注释之前加上
#
,而不是
谢谢你的回复,但我只是把它拆分成多行并添加了注释,以使其更易于阅读,这是代码中的一个平面模式。如果你发布了你尝试的确切代码,其他人将更容易看到他们是否可以复制它。您试图给出错误代码的口头描述很容易被误解或猜测。抱歉,我在玩re-seq并重新查找并包含错误代码,但您的解释很有意义,删除它已消除异常,谢谢
 (\d+\.\d+(e(-|\+)\d+)?)                             ;floats and scientific notation
|(\d+\/\d+)                                          ;fractions
|(0(x|X)([A-Fa-f]|\d)+)                              ;hex
|(([2-9]|[1-2][0-9]|3[0-2])(r|R)(([A-Za-z]|\d)+))    ;radix(ish) 
|(\d+)                                               ;int and oct