如何在 Java 中用正则表达式递归替换字符串

How to recusively replace string by regex in Java

我正在寻找一些方法来用 Java 中的正则表达式替换字符串,如下所示:

(BatteryTemperature > 12.23)

我需要做的是将 12.23 替换为 54.01,实际上是摄氏度到华氏度,如下所示:

(BatteryTemperature > 54.01)

但是,字符串可能有不同的条件,例如:

(Signal = 90) AND (BatteryTemperature > 12.23)

(Signal = 90) OR (Latitude = 123.653) AND (BatteryTemperature > 12.23)

我有如下正则表达式

(\((\w+) (>|<|=) (\d+.\d+)\))

然而,正则表达式 (?R) 似乎不支持 java?

有没有其他方法可以用转换后的值替换 BatteryTemperature 值。

(Signal = 90) OR (Latitude = 123.653) AND (BatteryTemperature > 54.01)

感谢任何帮助。

你的问题太复杂了。您要求的不是直接的解决方案。首先恕我直言,尝试查找文本的 indexOf,如 BatteryTemperature >。然后你应该检查在这个索引之后,是否有类似于任何数字序列的字符串文本。在这里,您可以使用正则表达式找出或使用 TextUtils.isDigitsOnly()。当你找到数字时,你可以很容易地将它从 C 转换为 F。

尝试将您的问题分解成更小的部分。

我已经通过 replaceAll() 和 Pattern 解决了我的问题,但不太确定是否有比这更好的方法。

        String sample = "(Signal = 90) OR (Latitude = 123.653) AND (BatteryTemperature > 54.01)"        
        String key = "BatteryTemperature";
        String[] array = sample.split(" AND | OR ");
        for(String tmp :array)
        {
            System.out.println("String: " + tmp);
            Pattern pattern = Pattern.compile("\(("+key+") (>|<|=) (-?\d+.\d*)\)");
            Matcher matcher = pattern.matcher(tmp);
            if(matcher.find())
            {
                for(int i = 0; i<=matcher.groupCount(); i++)
                {
                    if(matcher.group(i).equals(key))
                    {
                        sample = sample.replaceAll(matcher.group(i-1), key + " " + matcher.group(i+1) + " " + convertCelsiusToFahrenheit(matcher.group(i+2)));
                    }
                }
            }
        }