Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java regex组合标签_Java_Regex - Fatal编程技术网

Java regex组合标签

Java regex组合标签,java,regex,Java,Regex,我有一个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

我有一个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表示开始标记,I-tag表示继续标记/结束标记(如果没有找到更多的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>
英国广播公司是一家公共服务广播公司,总部设在伦敦广播公司

i、 e.需要从第一个标记中删除字符“B-”,从而形成所有标记,直到我们有“/i-”标记并在末尾添加。我们如何在java正则表达式中实现这一点。

您可以尝试以下正则表达式:

</[BI]-(\w+)>\s*<I-\1>|(</?)[BI]-(\w+>)
\s*|()
并替换为
\2\3


它的作用是:

\s*
匹配结束标记,紧接着是继续标记。在第2组或第3组中未捕获任何文本,因此与此匹配的所有文本都将被删除


()
然后匹配以
B-
I-
开头的其余标记。它捕获了第2组和第3组中
B-
I-
周围的文本,因此通过替换为
\2\3
B-
I-
可以有效地删除。

关于使用正则表达式解析XML/HTML的内容…@Arc676如果输出是XML,则很难称之为“解析”。这些看起来像是基本的字符串操作,只是字符串恰好是xml。@Rawing,你说得对。它只是用一些标记编码的基本字符串。它不遵循正常的xml约定。在我看来,使用XML解析器似乎有点过分了。因此,在线演示站点的regex方法帮助很大。这是我想要展示我天真的正则表达式技巧的东西。非常感谢你的提问和提供正确的答案!这非常有帮助,因为我还在使用IOB标记对XML进行一些转换。