Java 替换可以使用正则表达式在字符串中更改的参数

Java 替换可以使用正则表达式在字符串中更改的参数,java,regex,Java,Regex,假设我有一个字符串,输入字符串的不同版本: a) Name='book' Number='345' Version='12' Author='name1' b) Name='book' Version='12' Author='name1' Number='345' 我需要从这个输入字符串中删除Version='xx'和Number='xx'。此参数的值始终可以更改 最好的方法是什么?我试过正则表达式,比如: String input = input.substring(0, input.in

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

a) Name='book' Number='345' Version='12' Author='name1'
b) Name='book' Version='12' Author='name1' Number='345'
我需要从这个输入字符串中删除
Version='xx'和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'

那么如何制定通用方法呢?

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

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

replaceAll(“(Number | Version)='\\d+”,”)
查找
Number
Version
,后跟一个单引号中的数字,并将其替换为空字符串

如下所示,如果键/值对的顺序可以更改,则使用不同的正则表达式可能更好:

s.replaceAll("(?:^| )(?:Number|Version)='\\d+'", "").trim()

这将匹配键,无论它们前面是空格还是在行首。

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

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

replaceAll(“(Number | Version)='\\d+”,”)
查找
Number
Version
,后跟一个单引号中的数字,并将其替换为空字符串

如下所示,如果键/值对的顺序可以更改,则使用不同的正则表达式可能更好:

s.replaceAll("(?:^| )(?:Number|Version)='\\d+'", "").trim()

这将匹配键,无论它们前面是空格还是在行的开头。

您可以使用replaceAll方法实现对regex的操作,如下所示:

    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'

您可以使用replaceAll方法实现您想要对regex执行的操作,如下所示:

    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'

您是否错过了
编号|版本
替换的一组
Name='book'='345'
看起来与其他问题的含义不符:因为属性的顺序似乎是可变的,所以您应该在它们前面加上空格或开头string@Aaron这很有道理。我只需要找到一个解释,解释为什么它在没有组的情况下工作。它不工作,看看你写了什么,它返回:
Name='book'='345'
可能不是OP想要的;)@亚伦,100%谢谢。我可能在睡觉打字。你说得对,你是不是在
数字|版本
交替中遗漏了一组
Name='book'='345'
看起来与其他问题的含义不符:因为属性的顺序似乎是可变的,所以您应该在它们前面加上空格或开头string@Aaron这很有道理。我只需要找到一个解释,解释为什么它在没有组的情况下工作。它不工作,看看你写了什么,它返回:
Name='book'='345'
可能不是OP想要的;)@亚伦,100%谢谢。我可能在睡觉打字。你说得对