使用 Smooks 和 Freemarker 将 CSV 转换为 JSON。在 Freemarker 中使用匹配添加正则表达式时,语法失败并出现以下异常。当该特定条件被删除时,一切正常。
正则表达式用于检查字符串是否为正确的指数。
我在 Java 中尝试了相同的正则表达式,它工作得很好。
<#elseif message?contains("E+") && message?matches("[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?")>
异常(exception):
org.milyn.cdr.SmooksConfigurationException:
Error invoking @Initialize method 'initialize' on class 'org.milyn.templating.freemarker.FreeMarkerTemplateProcessor'.`
org.milyn.cdr.SmooksConfigurationException:
Error loading Templating resource: Target Profile: [[org.milyn.profile.Profile#default_profile]], Selector:`
最佳答案
它失败,因为 \.
不是字符串文字中的有效转义。 (出于同样的原因,在 Java 中编译也会失败。)您要么必须编写 \\.
(就像在 Java 中一样),或者更好的是,以 r 开头字符串文字
并保持 \.
不变(r
表示原始字符串文字,它不会特殊对待 \
): r"[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?"
顺便说一句,如果这确实是 Smooks 显示的全部内容,那么它并没有多大帮助。解析异常应该在某处...但如果没有,您可以使用 https://try.freemarker.apache.org/尝试您的模板片段。
关于java - 为什么这个正则表达式在 FreeMarker 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55920992/