5

文字列名 s があります。

String s = "<NOUN>Sam</NOUN> , a student of the University of oxford , won the Ethugalpura International Rating Chess Tournament which concluded on Dec.22 at the Blue Olympiad Hotel";  

文字列からすべての < NOUN > および < /NOUN > タグを削除したいと考えています。これを使ってタグを削除しましたが、

s.replaceAll("[<NOUN>,</NOUN>]","");

はい、タグを削除します。ただし、文字列から「U」および「O」の文字も削除されるため、次の出力が得られます。

 Sam , a student of the niversity of oxford , won the Ethugalpura International Rating Chess Tournament which concluded on Dec.22 at the Blue lympiad Hotel

誰でもこれを正しく行う方法を教えてもらえますか?

4

4 に答える 4

17

試す:

s.replaceAll("<NOUN>|</NOUN>", "");

正規表現では、構文は、出現順序に関係なく、括弧内のすべての文字[...]と一致します。したがって、この例では、「<」、「N」、「O」などのすべての出現が削除されます。代わりにパイプ ( ) を使用して、"<NOUN>" と "</NOUN>" の両方に一致させます。|

以下も機能するはずです (よりドライでエレガントと見なすことができます)。これは、スラッシュの有無にかかわらずタグに一致するためです。

s.replaceAll("</?NOUN>", "");
于 2012-08-03T08:11:53.843 に答える
2

String.replaceAll() は、最初の引数として正規表現を取ります。正規表現:

"[<NOUN>,</NOUN>]"

括弧内に、識別されて削除される文字のセットを定義します。<したがって、文字、、、、、、およびカンマ>を削除するよう求めています/NOU

おそらく、あなたが望むことをするための最も簡単な方法は、次のことです:

s.replaceAll("<NOUN>","").replaceAll("</NOUN>","");

これは、何を削除するかで明示されています。より複雑な正規表現が明らかに可能です。

于 2012-08-03T08:14:21.373 に答える
0

これには、「<[/]*NOUN>」という 1 つの正規表現を使用できます。

s.replaceAll("<[/]*NOUN>","");

トリックを行う必要があります。「[/]*」は、「<」の後の 0 個以上の「/」に一致します。

于 2012-08-03T08:23:39.180 に答える