2014-06-19 41 views
-1

更换两个字符串比如我有一个文本文件正则表达式在同一行

 
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); 
     } 
+1

你能保证这些字符串不会出现在你的行其他地方吗?如果是这样,'someString.replace(“STRING_NEW1”,“foo”);'会做到这一点。 –

+0

@Duncan Nope。他们每次都会改变。所以我需要一个稳定的正则表达式来使它们变化 – user3211165

+0

那么字符串的其余部分呢?这有多少稳定? –

回答

1

你不需要正则表达式,只是读这行的字符串变量,并调用String.replace()方法,其中第一个参数是旧的字符串,第二个参数是新的。如果你想与explicite字符串值来代替例如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\""); 
+0

STRiNG_NEW1每次都有所不同。所以是的,我需要一个正则表达式 – user3211165

+0

它如何改变? – Mifmif

+0

他们是数字,他们应该经常改变这些令牌取决于一些用户输入 – user3211165

1

你可以试试下面的正则表达式替换string1string2

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

在更换零件,而不是第三和第四组你需要把替换字符串的字符串1和字符串2

DEMO

+0

你的正则表达式似乎工作正常,并不需要我知道字符串1和2被替换。然而,我没有得到你的意思“而不是第三和第四组,你需要把替换字符串的字符串1和字符串2。”你能解释一下吗? – user3211165

+0

在替换零件上首先放置$ 1代表group1,它在string1之前全部匹配。第二个匹配是string1,而不是你需要把替换字符串。第三组是*,所以你必须把这个。第四组表示string2,而不是将替换字符串放在string2中。并添加最后一个组。 '$ 1foo $ 3巴$ 5'。我只知道正则表达式,但我不知道编码部分。 –

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"); 
+0

它不起作用。它不会改变字符串 – user3211165

+0

@ user3211165你试过了吗?我试过了,它工作 –