用于替换同一行中的两个字符串的正则表达式

时间:2014-06-19 15:14:26

标签: java regex replace

例如,我在文本文件中有这一行

Additional_Cost_utilities=(out.Utilities.Ener.Steam_cons.Value*0.056 + out.Utilities.Ener.Elec_cons.Value*0.09 + (STRING_NEW1*STRING_NEW2*0.003));

我需要一个正则表达式来用一些新字符串替换STRING_NEW1和STRING_NEW2的标记。我可以使用什么正则表达式,以便除了这两个字符串之外的其他行中没有编辑任何其他内容?

编辑:每次要替换的字符串都不同。所以我不能使用替换。需要一个稳定的正则表达式来修改STRING_NEW1和STRING_NEW2令牌,而不管它们的内容是什么,这将是浮点数

我试图用来替换大编码部分特定行中的字符串的代码如下。正则表达式需要识别要替换的字符串的行和标记。我希望这有帮助

try {
        Path path = Paths.get("read.m");
        Charset charset = StandardCharsets.UTF_8;

        String content = new String(Files.readAllBytes(path), charset);

        content = content.replace("STRING_1_IN_THE_LINE", "new string1")
                .replace("STRING_2_IN_THE_LINE", "new string2");

        Files.write(path, content.getBytes(charset));

        } catch (IOException e) {
            //Simple exception handling, replace with what's necessary for your use case!
            throw new RuntimeException("Generating file failed", e);
         }

3 个答案:

答案 0 :(得分:1)

您不需要正则表达式,只需读取此行一个String变量并调用String.replace()方法,其中第一个参数是旧字符串,第二个参数是新参数。如果你想用明确的字符串值替换例如STRING_NEW1,那么rty:

String data="Additional_Cost_utilities=(out.Utilities.Ener.Steam_cons.Value*0.056 + out.Utilities.Ener.Elec_cons.Value*0.09 + (STRING_NEW1*STRING_NEW2*0.003));"
data=data.replace("STRING_NEW1","\"a new string value\"");

答案 1 :(得分:1)

您可以尝试使用以下正则表达式替换string1string2

^(.*\+\s+\()([^*]*)(\*)([^*]*)(.*)

在替换部分中,您需要为string1和string 2添加替换字符串,而不是第3组和第4组。

DEMO

答案 2 :(得分:0)

你可以使用string.replace两次来保留两个简单的正则表达式,使它们更具可读性。

// Change WHATEVER1 for the 1st string you w
// Change WHATEVER2 for the 2nd string you want
String result = str.replace(" \\(\\w+\\*", "(WHATEVER1*")
                   .replace("\\*\\w+\\*0\\.003", "*WHATEVER2*0.003");