删除两个字符串之间的数据

时间:2013-10-23 11:30:55

标签: java regex string

我必须删除两个字符串之间的数据,如下所示

<PACKET>752</PACKET> 
  <TIME>23-Oct-2013 12:05:46 GMT Standard Time</TIME> 
  <INTERVAL>2</INTERVAL> 

<HEADER>hi this should not be printed only</HEADER>
<DATA></DATA>

在此我必须删除&lt; HEADER&gt; &lt; / HEADER&gt; 之间的数据。
任何人都可以为此给我正则表达式吗?

3 个答案:

答案 0 :(得分:3)

我认为这可以通过RegEx完成工作:

String str="b1<HEADER>aaaaa</HEADER>b2";
String newstring = str.replaceAll("<HEADER[^>]*>([^<]*)<\\/HEADER>", "");
System.out.println(newstring);

这会打印b1b2

如果<HEADER>内有其他标签,则上述操作将失败。请考虑以下示例:

String str = "b1<HEADER>aa<xxx>xx</xxx>aaa</HEADER>b2";
String newstring = str.replaceAll("<HEADER[^>]*>([^<]*)<\\/HEADER>", "");
System.out.println(newstring);

打印:b1<HEADER>aa<xxx>xx</xxx>aaa</HEADER>b2

要克服这一点并删除包含的标签,请使用:

newstring = str.replaceAll("<HEADER.+?>([^<]*)</HEADER>", "");

这将打印b1b2

答案 1 :(得分:1)

Maroun是对的,这不是一个好主意,但如果你必须这样做,那么这可能会有效:

(?ms)(.*<HEADER>).*(<\/HEADER>.*)

这会捕获第1组中<HEADER>的所有内容,以及第2组中</HEADER>以后的所有内容。然后,您可以连接两者以删除中间位。

见这里:http://regex101.com/r/bC2eQ7

答案 2 :(得分:0)

此RegEx用en empty String替换标记内的所有内容:

String input = "<PACKET>752</PACKET>...<HEADER>hi this should be printed only</HEADER><DATA></DATA>";
String output = input.replaceAll("(?<=<HEADER>).*?(?=</HEADER>)", "");

结果:

<PACKET>752</PACKET>...<HEADER></HEADER><DATA></DATA>