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%谢谢。我可能在睡觉打字。你说得对