Java 如何修复正则表达式以删除每个元素之前的xml Notation?

Java 如何修复正则表达式以删除每个元素之前的xml Notation?,java,regex,string,Java,Regex,String,我有如下字符串格式的xml: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <User> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <User> <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>

我有如下字符串格式的xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<User>
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <User>
        <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
    </User>
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <User>
        <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
    </User>
</User>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<User>
    <User>
        <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
    </User>
    <User>
        <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
    </User>
</User>

c33edcd9-5c13-4ceb-a81a-0a8f44b813ed
c33edcd9-5c13-4ceb-a81a-0a8f44b813ed
但是每个元素前面都有

如何使用正则表达式删除这一额外行,但要在所有容器下保存Notation,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<User>
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <User>
        <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
    </User>
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <User>
        <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
    </User>
</User>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<User>
    <User>
        <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
    </User>
    <User>
        <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
    </User>
</User>

c33edcd9-5c13-4ceb-a81a-0a8f44b813ed
c33edcd9-5c13-4ceb-a81a-0a8f44b813ed
我试着用

public static String removeExtraMetadata(String xml, String tag){        
       return  xml.replaceAll("(?s)<?xml version=\"1.0\" encoding=\"UTF-8\" 
                         standalone=\"yes\"?>.*?", "");
    }
public static String removeExtraMetadata(String xml, String tag){
return xml.replaceAll("(?s)<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>.*?" + tag, tag);
    }
publicstaticstringremoveextrametadata(stringxml,stringtag){
返回xml.replaceAll(“(?s)。*?”,“”);
}
公共静态字符串removeExtraMetadata(字符串xml、字符串标记){
返回xml.replaceAll(“(?s)。*?”+标记,标记);
}
但是这种方式对我不起作用

设法

 public static String removeExtraMetadata(String xml){
       return  xml.replaceAll("^\\s+<\\?xml\\s+version=\"1.0\".*\\n", "");
 }
public静态字符串removeExtraMetadata(字符串xml){

return xml.replaceAll(“^\\s+您可以使用此正则表达式匹配要从xml中删除的行

^\s+<\?xml\s+version="1.0".*\n
它在删除你想删除的行的地方打印

Before: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<User>
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <User>
        <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
    </User>
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <User>
        <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
    </User>
</User>
After: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<User>
    <User>
        <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
    </User>
    <User>
        <objectId>c33edcd9-5c13-4ceb-a81a-0a8f44b813ed</objectId>
    </User>
</User>
之前:
c33edcd9-5c13-4ceb-a81a-0a8f44b813ed
c33edcd9-5c13-4ceb-a81a-0a8f44b813ed
之后:
c33edcd9-5c13-4ceb-a81a-0a8f44b813ed
c33edcd9-5c13-4ceb-a81a-0a8f44b813ed

使用Java代码示例中的正则表达式,我对Java和字符串做了一些调整。

无法使用它。单元测试仍然失败(未删除元注释)您的回答是正确的,并且在删除regex开头的^symbol后为我工作,谢谢!@Roberto:是的,我注意到它是字符串,我必须删除
^
,才能在Java中工作。很高兴知道它工作了:)在这个答案中修复的另一个错误是OP忘记了转义
。一个文本
在正则表达式中由字符串
\?
表示,因此
\\?
是字符串文本(人们总是忘记转义
,但在这种情况下,与大多数情况一样,这并不重要。)