替换可以使用正则表达式

时间:2018-09-21 15:39:32

标签: java regex

假设我有一个字符串,输入字符串的版本不同:

a) Name='book' Number='345' Version='12' Author='name1'
b) Name='book' Version='12' Author='name1' Number='345'

我需要从此输入字符串中删除Version='xx' and Number='xx'。此参数的值可以随时更改。

最好的方法是什么?我尝试了正则表达式,例如:

String input = input.substring(0, input.indexOf("Number")) + "" + input.substring(input.indexOf("Version"));

但这仅在这种情况下有效:

a) Name='book' Number='345' Version='12' Author='name1'

但并非如此:

b) Name='book' Version='12' Author='name1' Number='345'

那么如何制定通用方法?

2 个答案:

答案 0 :(得分:5)

您可以使用正则表达式替换:

ProcessBuilder builder = new ProcessBuilder("/bin/sh", "-c", "sudo -H -u xfbcft -i");
            builder.redirectErrorStream(true);

返回"Name='book' Number='345' Version='12' Author='name1'" .replaceAll("( Number| Version)='\\d+'", "")

Name='book' Author='name1'找到replaceAll("( Number| Version)='\\d+'", "")Number,后跟单引号中的数字,并将其替换为空白字符串。

如下面的Aaron's comment所建议,如果键/值对的顺序可以更改,则使用不同的正则表达式可能会更好:

Version

无论键之前是空格还是在行首,这都将与键匹配。

答案 1 :(得分:0)

您可以使用如下所示的replaceAll方法来实现正则表达式的目标:

    String input = "Name='book' Number='345' Version='12' Author='name1'";
    String input2 = "Name='book' Version='345' Number='12' Author='name1'";

    input = input.replaceAll("(Number|Version)='\\d+'", "");
    input2 = input2.replaceAll("(Number|Version)='\\d+'", "");

    System.out.println(input);
    System.out.println(input2);

输出为:

Name='book'   Author='name1'
Name='book'   Author='name1'