2015-10-13 25 views
1

我正在使用字符串替换节点来编写knime,并且必须在数字数字后面(字符串单元格内)添加数学运算符号(乘法,'*') 。我找到了(基于Java的)正则表达式的数字查找编号并添加和操作字符(java,knime)

((?:\d+\.)?\d+) 

我试图通过将替换文本添加乘法运算

((?:\d+\.)?\d+)\* 

但更换现在创建类似:

待更换:

1.456 substance 

实际上替换为:

((?:\d+\.)?\d+)\*substance 

但需要的是:

1.456*substance 

如何修改替换文本,以获得所需的输出或什么是正确的做法?

谢谢。

+0

我想你打算在替换文本中使用反向引用'$ 1'。像'$ 1 *物质'一样? –

+0

@Jongware:没有实际的代码。它是knime中的一个字符串替换节点,它在后台为java代码提供服务。 (对不起,我真的是新手)。将它与查找和替换进行比较在记事本内。 – Rockbar

+0

@Rockbar为什么不是'(\ d * \。\ d *)'?你可以检查样本http://www.regexr.com/3bvkf –

回答

2

注意,当你搜索文本,您使用的是正则表达式模式和更换时,你需要一个替换字符串。替换字符串不能包含模式,但可以包含对捕获组(编号或名称)的反向引用。

在Java中,反向引用参照$ + number表示法。

所以,使用((?:\d+\.)?\d+)\s正则表达式,和一个$1*替换字符串,你可以得到你需要的:1.456*substance

查看你的updated regex demo

请注意,要匹配浮点值,可以考虑使用(\d+(?:\.\d+)?)\s(\d*\.?\d+)\s正则表达式模式。对于复杂模式来匹配各种浮点数,请参见Matching Floating Point Numbers with a Regular Expression regular-expressions.info。

+1

“返回参考”是我正在寻找。你的代码就是解决方案。非常感谢你! – Rockbar