2

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

<数据包>752</数据包>
  <TIME>2013 年 10 月 23 日 12:05:46 GMT 标准时间</TIME>
  <INTERVAL>2</INTERVAL>

<HEADER>你好,这不应该只打印</HEADER>
<数据></数据>

在此我必须删除<HEADER></HEADER>之间的数据。
任何机构都可以为此给我正则表达式吗?

4

3 回答 3

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.

于 2013-10-23T11:45:43.140 回答
1

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

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

这将捕获<HEADER>第 1 组之前的所有内容,包括第 2 组中的所有内容</HEADER>。然后,您可以将两者连接起来以删除中间的位。

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

于 2013-10-23T11:38:58.700 回答
0

此 RegEx 将标记内的所有内容替换为 en 空字符串:

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>
于 2013-10-23T11:51:12.610 回答