正则表达式。找到所有int并替换为double

时间:2016-10-07 09:21:31

标签: regex

我有一个带有数学公式的字符串,如

5+10/3-3.0 *(4+8.0)

我希望将所有int值替换为double

结果:

5.0+10.0/3.0-3.0 *(4.0+8.0)

我可以使用([\d]*)\.([\d]*)找到双值,但我想找到不属于双值的所有([\d]*)

2 个答案:

答案 0 :(得分:2)

您可以使用反向引用。所有整数应该由数字组成,不应该以点开头,并且要用点或其他数字成功(因为我们宁愿一起捕获所有数字符号)。 C#flavor的示例:

(?<!\.)(\d+)(?![\.\d])

答案 1 :(得分:0)

由于我们不知道您正在使用哪种语言以及如何处理它,因此唯一可以进行大量替换的便携式解决方案是两次。首先使用\b(\d+)\b替换第1组,使用1 +“。0”,然后第二次使用\.0\.运行,并用一个点替换所有(第0组)。虽然这个解决方案更重,但它是最简单和最普遍的。

使用不太便携的表达式是((\d+)(\.\d+)?)条件处理。这是一个Java示例:

java.util.regex.Pattern pc = java.util.regex.Pattern.compile("((\\d+)(\\.\\d+)?)");
java.util.regex.Matcher m = pc.matcher("5+10/3-3.0 *(4+8.0)");
StringBuffer sb = new StringBuffer();
while (m.find()) {
    m.appendReplacement(sb, m.group(3) == null ? m.group(1) + ".0" : m.group(1));
}
m.appendTail(sb);
System.out.println(sb.toString());

也可以在PHP中使用带有回调函数的表达式来执行相同的操作。