我在java对象中有大的xml。我想替换
<countryChannel countryCode="CountryCode"/>
with
<countryChannel countryCode="CountryCode" active="true"></countryChannel>
这是samle xml(输入)
</articleMedia>
<channels>
<countryChannel countryCode="CountryCode"/>
</channels>
</articleMedia>
<channels>
<countryChannel countryCode="CountryCode"/>
</channels>
</articleMedia>
<channels>
<countryChannel countryCode="CountryCode"/>
</channels>
我知道请使用正则表达式如何只选择“/&gt;” countryChannel countryCode =“CountryCode”之前的所有字符串的一部分?
我有一个正则表达式,只选择整个字符串 https://regex101.com/r/NLHy2Y/1,但我怎样才能只选择所有“/&gt;”在“countryChannel countryCode =”CountryCode“”之前?
答案 0 :(得分:1)
在这种情况下,你甚至不需要正则表达式。您可以将String.replace()
与正确的文本一起使用:
String input = "<countryChannel countryCode=\"CountryCode\"/>\r\nsalala\r\n<countryChannel countryCode=\"CountryCode\"/>";
String replacement = input.replace("<countryChannel countryCode=\"CountryCode\"/>", "<countryChannel countryCode=\"CountryCode\" active=\"true\"></countryChannel>");
System.out.println(replacement);
这是一个技巧:如果您想将XML编辑为文本,那么您必须对xml如何序列化做出一些假设。在这种情况下,我做出了以下假设:
<countryChannel>
属性countryCode
个标签
CountryCode
<countryChannel countryCode="CountryCode"/>
您可能也希望包含其他国家/地区代码。只要它们不包含引号,您就可以使用以下正则表达式执行此操作:"<countryChannel countryCode=\"([^\"]*)\"/>"
并在替换中使用反向引用$1
。在这种情况下,您需要String.replaceAll()
方法,因为它会评估正则表达式。这就是代码的样子:
String input = "<countryChannel countryCode=\"CountryCode123\"/>\r\nsalala\r\n<countryChannel countryCode=\"CountryCode456\"/>";
String replacement = input.replaceAll("<countryChannel countryCode=\"([^\"]*)\"/>", "<countryChannel countryCode=\"$1\" active=\"true\"></countryChannel>");
System.out.println(replacement);
说明:[^...]
是一个否定的字符类。即一切,除了那些人物。所以[^"]*
匹配字符,但引号除外。这很酷,因为我们想在实际属性的末尾停止匹配。
因此,您可以检查您的大xml文件,并确保您有正确的假设。
不要将这样的正则表达式投入生产。只要您手动检查它们,这些正则表达式对于自己编辑文件来说很酷。但是,对于生产,您最好使用XSLT。