2

以下のように2つの文字列の間のデータを削除する必要があります

<パケット>752</パケット>
  <TIME>2013 年 10 月 23 日 12:05:46 GMT 標準時間</TIME>
  <INTERVAL>2</INTERVAL>

<HEADER>こんにちは、これは印刷するだけではいけません</HEADER>
<データ></データ>

これで、<HEADER></HEADER>の間のデータを削除する必要があります。
これについて正規表現を教えてくれる人はいますか?

4

3 に答える 3

3

私はこれが正規表現で仕事をすることができると思います:

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

それは良い考えではないというマルーンの意見は正しいですが、もしあなたがそれをしなければならないなら、これはうまくいくかもしれません:

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

<HEADER>これにより、グループ 1までのすべてがキャプチャされ</HEADER>、グループ 2 以降のすべてがキャプチャされます。その後、2 つを連結して、中間のビットを削除できます。

ここを参照してください:http://regex101.com/r/bC2eQ7

于 2013-10-23T11:38:58.700 に答える
0

この RegEx は、タグ内のすべてを空の文字列に置き換えます。

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 に答える