在RegEx
中,我想找到两个XML tags
之间的标记和所有内容,如下所示:
<primaryAddress>
<addressLine>280 Flinders Mall</addressLine>
<geoCodeGranularity>PROPERTY</geoCodeGranularity>
<latitude>-19.261365</latitude>
<longitude>146.815585</longitude>
<postcode>4810</postcode>
<state>QLD</state>
<suburb>Townsville</suburb>
<type>PHYSICAL</type>
</primaryAddress>
我想在primaryAddress
之间找到标签和所有内容,然后删除它。
primaryAddress
标记之间的所有内容都是变量,但我想在primaryAddress
时删除整个标记和子标记。
任何人都知道如何做到这一点?
答案 0 :(得分:98)
但是,如果您想要这样做,请搜索正则表达式
<primaryAddress>[\s\S]*?<\/primaryAddress>
并将其替换为空字符串......
答案 1 :(得分:15)
您应该可以将其与:/<primaryAddress>(.+?)<\/primaryAddress>/
标签之间的内容将位于匹配的组中。
答案 2 :(得分:4)
这可以捕获大多数最外层的标签对,即使是侧面或没有结束标签的属性
(<!--((?!-->).)*-->|<\w*((?!\/<).)*\/>|<(?<tag>\w+)[^>]*>(?>[^<]|(?R))*<\/\k<tag>\s*>)
编辑:如上面的评论所述,正则表达式总是不足以解析xml,尝试修改正则表达式以适应更多情况只会使它更长但仍无用
答案 3 :(得分:1)
使用此方法不好,但是如果您真的想用正则表达式拆分它
<primaryAddress.*>((.|\n)*?)<\/primaryAddress>
经过验证的答案会返回标签,但这只会返回标签之间的值。
答案 4 :(得分:0)
在我们的例子中,我们以String
的形式接收XML,并且需要删除具有某些“特殊”字符的值,例如&<>
等。基本上,有人可以向我们提供XML格式如下:
<notes>
<note>
<to>jenice & carl </to>
<from>your neighbor <; </from>
</note>
</notes>
因此我需要在其中String
中找到值jenice & carl
和your neighbor <;
并正确地转义&
和<
(否则,这是无效的xml您稍后将其传递给应重命名未命名的引擎。
使用regex这样做是一个很愚蠢的主意,但是它既便宜又容易。所以勇敢的人想做我做过的同样的事情,你去吧:
String xml = ...
Pattern p = Pattern.compile("<(.+)>(?!\\R<)(.+)</(\\1)>");
Matcher m = p.matcher(xml);
String result = m.replaceAll(mr -> {
if (mr.group(2).contains("&")) {
return "<" + m.group(1) + ">" + m.group(2) + "+ some change" + "</" + m.group(3) + ">";
}
return "<" + m.group(1) + ">" + mr.group(2) + "</" + m.group(3) + ">";
});