我有一个xml输出,如下所示
<B-company> The British </B-company> <I-company> Broadcasting Corporation is a </I-company> <B-Type> public </B-Type> <I-Type> service broadcaster </I-Type> <HQ> headquartered </HQ> <B-company> at </B-company> <I-company> Broadcasting </I-company> <B-Type> House </B-Type> <I-Type> in </I-Type> <HQ> London </HQ>
这里B-tag表示Begin Tag,I-tag表示continuation tag / end标签(如果没有找到更多的I-tag)。
我正在寻找像这样的输出
<company> The British Broadcasting Corporation is a </company> <Type> public service broadcaster </Type> <HQ> headquartered </HQ> <company> at Broadcasting </company> <Type> House in </Type> <HQ> London </HQ>
即。需要从第一个标签中删除字符“B-”,从而形成所有标签,直到我们有'/ I-'标签并添加到最后。我们如何在java正则表达式中实现这一点。
答案 0 :(得分:1)
你可以试试这个正则表达式:
</[BI]-(\w+)>\s*<I-\1>|(</?)[BI]-(\w+>)
并替换为\2\3
。
它的作用:
</[BI]-(\w+)>\s*<I-\1>
匹配紧跟其后是延续标记的结束标记。在第2组或第3组中没有捕获此文本,因此将删除与此匹配的所有文本。
(</?)[BI]-(\w+>)
然后匹配以B-
或I-
开头的其余标记。它会捕获第2组和第3组中B-
或I-
周围的文字,因此,通过替换为\2\3
,B-
或I-
将被有效删除。< / p>