Java 如何修复正则表达式以删除每个元素之前的xml Notation?
我有如下字符串格式的xml: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 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忘记了转义?
。一个文本?
在正则表达式中由字符串\?
表示,因此\\?
是字符串文本(人们总是忘记转义
,但在这种情况下,与大多数情况一样,这并不重要。)