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

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

以下内容也应该有效(并且可以被认为更加干燥和优雅),因为它将匹配带有和不带有正斜杠的标签:

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

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

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

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

也许做你想做的最简单的方法是:

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

这在它要删除的内容中是明确的。更复杂的正则表达式显然是可能的。

于 2012-08-03T08:14:21.373 回答
0

您可以为此使用一个正则表达式:“<[/]*NOUN>”所以

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

应该做的伎俩。“[/]*”匹配“<”之后的零个或多个“/”。

于 2012-08-03T08:23:39.180 回答
0

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

于 2016-04-13T09:31:47.163 回答