如何从字符串中删除特定的特殊字符模式

时间:2012-08-03 08:08:41

标签: java string

我有一个字符串名称,

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";  

我想删除所有&lt; NOUN &gt;和&lt; / NOUN &gt;来自字符串的标签。我用它来删除标签,

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 个答案:

答案 0 :(得分:13)

尝试:

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

在RegEx中,语法[...]将匹配括号内的每个字符,无论它们出现的顺序如何。因此,在您的示例中,所有外观均为“&lt;”, “N”,“O”等被删除。而是使用管道(|)来匹配“&lt; NOUN&gt;”和“&lt; / NOUN&gt;”。

以下内容也应该有效(并且可以被认为更干燥和优雅),因为无论是否使用正斜杠,它都会匹配标记:

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

答案 1 :(得分:2)

String.replaceAll()将正则表达式作为其第一个参数。正则表达式:

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

在括号中定义要识别并因此删除的字符集。因此,您要求删除字符<>/NOU和逗号。

也许最简单的方法可以做你想做的事情:

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

明确表示它正在删除。显然可能有更复杂的正则表达式。

答案 2 :(得分:0)

您可以使用一个正则表达式:“&lt; [/] * NOUN&gt;” 所以

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

应该做的伎俩。 “[/] *”在“&lt;”之后匹配零或更多“/”。

答案 3 :(得分:0)

试试这个:String result = originValue.replaceAll("\\<.*?>", "");