我有一个带有数学公式的字符串,如
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]*)
答案 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中使用带有回调函数的表达式来执行相同的操作。