我在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>


我可以使用regex知道如何在countryChannel countryCode =“ CountryCode”之前的所有字符串中仅选择“ />”部分吗?

我有一个正则表达式只选择整个字符串
https://regex101.com/r/NLHy2Y/1,但是如何仅选择所有以“ countryChannel countryCode =“ CountryCode”“开头的“ />”?

最佳答案

在这种情况下,您甚至不需要正则表达式。您可以在正确的文本中使用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。

关于java - 正则表达式选择在特定字符串之前的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49255527/

10-10 11:18